Kafka源码分析及图解原理之Broker端
副标题[/!--empirenews.page--]
首先从kafka如何创建一个topic来开始:
其中有这么几个参数:
二.什么是分区 一个topic可以有多个分区,每个分区的消息都是不同的。 虽然分区可以提供更高的吞吐量,但是分区不是越多越好。一般分区数不要超过kafka集群的机器数量。分区越多占用的内存和文件句柄。 一般分区设置为3-10个。比如现在集群有3个机器,要创建一个名为test的topic,分区数为2,那么如图: ![]() partiton都是有序切顺序不可变的记录集,并且不断追加到log文件,partition中的每一个消息都回分配一个id,也就是offset(偏移量),offset用来标记分区的一条记录 ,这里就用官网的图了,我画的不好: ![]() 2.1 producer端和分区关系 就图上的情况,producer端会把mq给哪个分区呢?这也是上一节我们提到的一个参数partitioner.class。 默认分区器的处理是:有key则用murmur2算法计算key的哈希值,对总分区取模算出分区号,无key则轮询。(org.apache.kafka.clients.producer.internals.DefaultPartitioner#partition)。当然了我们也可以自定义分区策略,只要实现org.apache.kafka.clients.producer.Partitioner接口即可:
2.2 consumer端和分区关系 先来看下官网对于消费组的定义:Consumers label themselves with a consumer group name, and each record published to a topic is delivered to one consumer instance within each subscribing consumer group. 翻译:消费者使用一个消费者组名来标记自己,一个topic的消息会被发送到订阅它的消费者组的 一个 消费者实例上。 consumer group是用于实现高伸缩性,高容错性的consumer机制。如果有consumer挂了或者新增一个consumer,consumer group会进行重平衡(rebalance),重平衡机制会在consumer篇具体讲解,本节不讲。那么按照上面的图继续画消费者端: ![]() 这里是最好的情况,2个partition对应1个group中的2个consumer。那么思考,如果一个消费组的消费者大于分区数呢?或者小于分区数呢? 如果一个消费组的消费者大于分区数,那么相当于多余的消费者是一种浪费,多余的消费者将无法消费消息。 (编辑:52站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 怎样关闭win10升级提示教程
- Windows 10系统,专业版与企业版有什么区别?
- Linux系统这11个发行版,你认识多少个?
- Windows11开发团队正尝试在不影响性能的情况下增加更多特效
- 怎样加快电脑启动速度
- PowerShell – Windows 10上缺少Install-WindowsFeature(和
- windows-server-2008 – Windows Server 2008:当NIC有多个
- 盘点阿里巴巴 33 个开源项目,你用过哪几个?
- 联想Win11笔记本Yoga Slim 7 Pro发布:起售价1449美元 最高
- 通过Internet在Windows上安装Linux文件系统的最佳方法?