加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

两张图读懂kafka应用

发布时间:2019-07-16 16:56:15 所属栏目:建站 来源:快乐生活你我
导读:Kafka 中的术语 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。 topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。 producer:往broker中某个topic里面生产数据。 consumer:从broker中某个topic获取数据。 Ka

kafka采用pull,并采用可配置化参数保证当存在数据并且数据量达到一定量的时候,consumer端才进行pull操作,否则一直处于block状态。kakfa采用整数值consumer position来记录单个分区的消费状态,并且单个分区单个消息只能被consumer group内的一个consumer消费,维护简单开销小。消费完成,broker收到确认,position指向下次消费的offset。由于消息不会删除,在完成消费,position更新之后,consumer依然可以重置offset重新消费历史消息。

消息发送语义

producer视角

消息最多发送一次:producer异步发送消息,或者同步发消息但重试次数为0。

消息至少发送一次:producer同步发送消息,失败、超时都会重试。

消息发且仅发一次:后续版本支持。

consumer视角

消息最多消费一次:consumer先读取消息,再确认position,最后处理消息。

消息至少消费一次:consumer先读取消息,再处理消息,最后确认position。

消息消费且仅消费一次。

注意:

如果消息处理后的输出端(如db)能保证消息更新幂等性,则多次消费也能保证exactly once语义。

如果输出端能支持两阶段提交协议,则能保证确认position和处理输出消息同时成功或者同时失败。

在消息处理的输出端存储更新后的position,保证了确认position和处理输出消息的原子性(简单、通用)。

可用性

在kafka中,正常情况下所有node处于同步中状态,当某个node处于非同步中状态,也就意味着整个系统出问题,需要做容错处理。

同步中代表了:

该node与zookeeper能连通。

该node如果是follower,那么consumer position与leader不能差距太大(差额可配置)。

某个分区内同步中的node组成一个集合,即该分区的ISR。

kafka通过两个手段容错:

数据备份:以partition为单位备份,副本数可设置。当副本数为N时,代表1个leader,N-1个followers,followers可以视为leader的consumer,拉取leader的消息,append到自己的系统中

failover:

1. 当leader处于非同步中时,系统从followers中选举新leader

2. 当某个follower状态变为非同步中时,leader会将此follower剔除ISR,当此follower恢复并完成数据同步之后再次进入 ISR。

另外,kafka有个保障:当producer生产消息时,只有当消息被所有ISR确认时,才表示该消息提交成功。只有提交成功的消息,才能被consumer消费。

因此,当有N个副本时,N个副本都在ISR中,N-1个副本都出现异常时,系统依然能提供服务。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读