kafka 要实现高数据量的存储和消费,如何能保证数据的高效性处理?
kafka 的架构是多节点-分布式结构,多个服务器处理数据,保证系统的高可用和高性能;
对于数据处理:期望系统的数据分布均匀,让每一个节点都可以高效处理数据;数据的均匀,kafka 如何实现?
kafka 通过分区可以实现数据的均匀存储/消费;
kafka 中的 主题(topic)是逻辑容器,topic 下面还有分区,分区下面是消息;同时,一个topic 中的消息不会存储在不同的分区上面,也就是说消息只会属于一个分区;通过多个分区可以将消息存储到不同的服务器上面,实现了消息的均匀分布,提升系统的整体性能;kafka -生产者的分区策略
生产者发送消息的时候,可以指定对应的分区策略,确保消息可以发送到不同的分区中;
常见的分区策略:
- 轮询策略:
轮询策略是 java 生产者默认的分区策略,能保证消息最大限度地被平均分配到所有分区上 - 随机策略:
随机消息到不同的分区上,会导致消息的不均匀分布 - Key-ordering策略
Key-ordering策略指的的消息键策略,可以指定消息字段为分区的 key ;
总结:
分区是实现负载均衡以及高吞吐量的关键,故在生产者这一端就要仔细盘算合适的分区策略,避免造成消息数据的“倾斜”,使得某些分区成为性能瓶颈,这样极易引发下游数据消费的性能下降。