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。那么思考,如果一个消费组的消费者大于分区数呢?或者小于分区数呢? 如果一个消费组的消费者大于分区数,那么相当于多余的消费者是一种浪费,多余的消费者将无法消费消息。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何解决Windows 10中Outlook中的附件问题
- windows-server-2008 – 不明原因的慢速千兆网络速度
- 空闲CPU在做什么?
- windows-server-2008 – 完全禁用“此程序已停止工作等”对
- 你用的Windows操作系统是不是盗版?微软知道吗
- 如何在Linux下使用fstrim延长SSD驱动器的寿命
- 微软官方预热Win11秋季新品发布会 将公布新的Surface Pro 8
- windows-server-2003 – 如何审核文件以查看谁删除了文件?
- 配置管理 – 我可以使用什么工具来管理Windows Server环境的
- 别小看这10个命令行工具,助你实现实时 Linux 系统性能监控
- Linux使用Pidstat命令查看进程状态信息
- windows-server-2003 – 需要另一个域控制器
- windows-xp – 是否可以在Windows XP中从命令行禁
- 如何改善Windows XP启动时间?
- windows-server-2012-r2 – 无法激活Windows Ser
- windows-server-2012 – 识别Windows 2012 Serve
- Windows桌面虚拟化而不是替换工作站
- windows-xp – 如何在XP中创建Windows服务
- windows-server-2008 – Windows 7 x64 Ultimate
- 华为方舟编译器正式开源了,采用自主平台托管