Kafka原理--主题、分区、消费者的关系
原文网址:Kafka原理--主题、分区、消费者的关系-CSDN博客
简介
本文分享kafka主题、分区与消费者的关系。
kafka 为了保证消息顺序性(FIFO),一个partition只能被同一组的一个consumer消费。
不同组的consumer可以消费同一个partition,一个consumer可以消费多个partition。
相关网址
Kafka原理--工作流程-CSDN博客
注意
RocketMQ的主题与分区、分区与消费者的关系,与Kafka基本一样!几个区别是
1.RocketMQ没有Topic瓶颈。详见:队列很多时,为什么RocketMQ比Kafka性能好?-CSDN博客
2.RocketMQ支持集群模式、广播模式。Kafka只支持集群模式。(集群模式:一个消费组只有一个消费者消费。广播模式:所有消费者都消费。)
主题与分区
为什么要分区?
将topic的消息打散到多个分区,分布式地保存在不同的broker上,可以提高producer和consumer处理消息的吞吐量。
Kafka的producer和consumer都可以多线程地并行操作,而每个线程处理的是一个分区的数据。因此分区实际上是调优Kafka并行度的最小单元。
对于producer而言,它是用多个线程并发地向不同分区所在的broker发起Socket连接同时给这些分区发送消息;而consumer,同一个消费组内的所有consumer线程都被指定topic的某一个分区进行消费。
最佳实践
如果一个broker只有某topic的一个partition,能最大限度发挥顺序写的优势。
如果一个broker对应某topic的多个partition,需要随机分发,顺序IO会退化成随机IO,性能下降。
测试:3个 Broker,1个 Topic,无Replication,异步,3个 Producer,消息 Payload 为100字节。
第一阶段
当 Partition 数量小于 Broker个数时,Partition 数量越大,吞吐率越高,且呈线性提升。
Kafka 会将所有 Partition 均匀分布到所有Broker 上,所以当只有2个 Partition 时,会有2个 Broker 为该 Topic 服务。
3个 Partition 时,同理会有3个 Broker 为该 Topic 服务。
第二阶段:
当 Partition 数量多于 Broker 个数时,总吞吐量并未有所提升,甚至还有所下降。
Topic瓶颈
Topic多时,性能明显降低。单机超过64个队列(分区),负载明显升高,且分区越多,发送消息响应时间越长。
原因是:在Broker上,每一个分区都是一个单独的文件。如果Topic变多,分区数也会上升,原本的顺序读写会变成随机读写,性能极度下降。
分区与消费者
全文已转移到此网址:Kafka原理-主题、分区、消费者的关系 - 自学精灵