kafka基础组件

kafka基础组件,第1张

kafka基础组件 角色

broker:节点,就是你看到的机器,也就是一个kafka服务provider:生产者,发消息的consumer:消费者,读消息的zookeeper:信息/注册中心,记录kafka的各种信息的地方controller:其中的一个broker,作为leader身份来负责管理整个集群。如果挂掉,借助zk重新选主。 逻辑组件

上图中topic1有三个partition,每个partition有3个副本。注意:三个其实都是副本,只不过有leadr、follower的区别。

topic:主题,一个消息的通道,收发总得知道消息往哪投。类似于RocketMQ的topicpartition:分区,每个主题可以有多个分区分担数据的传递,多条路并行,吞吐量大。类似于RocktMQ的queueReplicas:副本,每个分区可以设置多个副本,副本之间数据一致。相当于备份,有备胎更可靠leader & follower:主从,上面的这些副本里有1个身份为leader,其他的为follower。leader处理partition的所有读写请求。follower副本仅有一个功能,那就是从leader副本拉取消息,尽量让自己跟leader副本的内容一致。


像上图所示:topic只是一个逻辑的概念,多个broker上的partition可能组成一个topic。我们针对于topic的时候就把broker集群看成一个服务,因为topic是横跨多个broker的。


如上图所示:每个partition都会有多个副本,为了方便我就只画了一个副本。
比如partition0、partition0副本。他们俩中partition0为leader,partition0副本为follower。如果还有partition0还有别的副本,那么都是follower。
注意:partition0、partition1、partition2也是副本,不过是leader副本而已。图中总共有6个副本

副本集合

AR:所有副本的统称,AR=ISR+OSRISR:同步中的副本,可以参与leader选主。一旦落后太多(数量滞后和时间滞后两个维度)会被踢到OSR。【需要明确一点。ISR不只是追随者副本集合,它必然包括Leader副本。甚至在某些情况下,ISR只有Leader这一个副本。】OSR:踢出同步的副本,一直追赶leader,追上后会进入ISR

上图AR有6个。全都是副本。我们现在假设partition0副本由于出现网络波动导致数据同步过慢。
所以我们的OSR=1,也就是partition0副本。
剩下的副本都在正常同步中,也就是ISR。

消息标记


offset:偏移量,消息消费到哪一条了?每个消费者都有自己的偏移量HW:(high watermark):副本的高水印值,客户端最多能消费到的位置,HW值为8,代表offset为[0,8]的9条消息都可以被消费到,它们是对消费者可见的,而[9,12]这4条消息由于未提交,对消费者是不可见的。LEO:(log end offset):日志末端位移,代表日志文件中下一条待写入消息的offset,这个offset上实际是没有消息的。不管是leader副本还是follower副本,都有这个值。

那么这三者有什么关系呢?
比如在副本数等于3的情况下,消息发送到Leader A之后会更新LEO的值,Follower B和Follower C也会实时拉取Leader A中的消息来更新自己,HW就表示A、B、C三者同时达到的日志位移,也就是选取A、B、C三者中LEO最小的那个值作为现在的HW。由于B、C拉取A消息之间延时问题,所以HW一般会小于LEO,即LEO>=HW>OFFSET。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5719979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存