kafka效率优化:
数据分区存储
在topic内设置了多个分区,使kafka的消费者进程池能得到有序性保证和负载均衡,使得topic对应的消费组里的消费者们各自可以独享一个分区。如此的话,每个消费者是其消费的分区的唯一reader,在单个reader下当然保证了有序这件事。而且多个分区也使得负载可以比较平衡。
具体流程:
1. Producer根据指定的partition方法,将消息发布到指定topic的partition里面
2. kafka集群接收到Producer发过来的消息后,将其持久化到硬盘
3.Consumer从kafka集群pull数据,并控制获取消息的offset
数据加密存储
启用消息压缩机制是一个良好的策略;压缩需要消耗少量的CPU资源,不过对于kafka而言,网络IO更应该需要考虑.可以将任何在网络上传输的消息都经过压缩。即消耗少部分CPU资源,节省较大量磁盘资源。kafka支持gzip/snappy等多种压缩方式。snappy压缩效率较快,gzip压缩率较高。
kafka与传统的消息队列的区别:
1.
2. 最后一个是kafka,它会把信息持久化
3.由于 Kafka 信息保留和消费者组 (consumer group) 的概念, 这是完全可能的。Kafka 的消费者组在向某个话题询问信息时,会向 Kafka 告知自己的身份。consumer group 消费完消息以后, Kafka 将会记录每个 consumer group 消费信息的偏移量 (offset),以便它不会重复消费。
consumer的负载均衡:
topic的并发消费能力,步骤如下:
1、 假如topic1,具有如下partitions: P0,P1,P2,P3
2、 加入group中,有如下consumer: C1,C2
3、 首先根据partition索引号对partitions排序: P0,P1,P2,P3
4、 根据consumer.id排序: C0,C1
5、 计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)
6、 然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]