Kafka知识盘点【叁】_消费者

Kafka知识盘点【壹】_生产者

Kafka知识盘点【贰】_broker

 

1.消费者组

生产环境上,kafka都是配置消费者组来进行topic消息的消费。对于一个消费者组,会有多个消费者实例,同一个topic的消息只会发送到一个消费者组的其中一个消费者实例上消费,但是同一个topic可以被多个消费者组订阅。

kafka的消息消费是基于拉模式的,即消费者不断调用poll()方法,获取订阅topic的一组消息。前文中我们知道,kafka的消息是划分多个分区保存在broker上的,那么对于一个消费者实例,也是会指定去消费其中一个消息分区上的消息的。所以,kafka对于顺序消费也只能保证同一个分区上的消息可以实现。

kafka的设计是每个消费者会为它所消费的分区位数属于自己的消费位置信息,即消费偏移(consumeOffset)。和该信息维护在broker上相比:broker变成了有状态的,难以维护;需引入ack方式确认消费成功;broker要维护所有消费者的消费偏移,结构复杂。

kafka消费者会定期向broker集群汇报消费偏移,即位移提交。在0.10.0之前的版本是提交到zk的/consumers/<group.id>/offsets/<topic>/<group.id>里,新版本是保存到内部一个topic(__consumer_offsets)中。默认5s(auto.commit.interval.ms)自动提交一次每个分区中最大的消息位移。如果不想自动提交,则将enable.auto.commit设置为false。

 

2.分区分配

2.1 分配策略

通过partition.assignment.strategy来设置,目前支持3种:

RangeAssignor(默认):按照消费者总数和分区总数进行整除运算来获取一个跨度,然后根据跨度平均分配。假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。

RoundRobinAssignor:轮询分配。

我们可以得知,消费者数量小于等于分区数量比较合理。

 

2.2 再均衡

即分区的消费权从一个消费者转换到另一个消费者的过程。当有消费者挂掉(controller超过指定时间没有收到该消费者心跳),或有新的消费者加入消费者组都会触发再均衡。

再均衡由消费者组中第一个加入的消费者分配,它会先从controller获取所有消费者信息,然后为每个消费者分区,之后将这些信息发送给controller,最后controller再下发到各个消费者。每个消费者只能看到自己的分配信息。

 

3.参数配置

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值