5、分区消费模型和组消费模型

一、分区消费模型

在这里插入图片描述

分区消费模型:
4个分区4个消费者实例,如图所示,一个分区对应一个消费者。

步骤:
1、获取分区数个数
2、为每一个分区创建一个消费线程或进程,对应一个消费者实例
3、每一个消费者实例工作内容:
(1)创建kafka实例的连接(主机名和端口)
(2)指定消费者参数(对应topic的哪个partition分区)
(3)设置消费的偏移量(主题的某分区的哪个偏移量号开始-每条消息对应一个偏移量,从上次断开地方开始消费)
(4)死循环–从某个主题的某分区进行处理,保存当前的偏移量(或提交给kafka-可选)

二、组消费模型

在这里插入图片描述

消费者组A和B,A有两个消费者,B有四个消费者实例。消费者组A中消费了两个服务中的四个分区(一个消费者实例消费了两个分区)。消费者组B中也消费了两个服务中的四个分区。一条消费可以同时发送给消费者组A和消费者组B(A和B都可以拿到kafka的全量消息)

组消费模型(伪代码):
1、设置需要创建的流数N(一个消费者组中多少个消费者,如消费者组A中有两个消费者实例则N为2),每一个流创建一个消费者实例。
2、对每一个流(消费者-线程)需要做如下处理:
(1)创建到Kafka代理的连接KafkaClient(host,port)
(2)指定消费者参数构建消费者(主题、分区)
(3)设置从头消费还是从最新的消费(smallest或largetst–如果死机)
(4)死循环处理
–从指定的topic的第index个流取数据
–处理
–offset会自动提交到zookeeper,无需我们操作,当然可以自己保存然后自己提交

消费者组A中只有两个消费者,如何消费两台broker中的4个分区?这里就是“consumer分配算法”。
1、对当前集群下的所有的topic下的所有partition进行排序(p0, p1,p2,p3)
2、对所有消费者进行排序(consumer1,consumer2)
3、partition数量初一consumer的数量的n=2。
4、将第i*N到(i+1)*N-1的分区分配给第i个消费者。(p0,p1分配给consumer1,把p3和p4分配给consumer2)
5、把以上的分配关系写入到kafka集群对应的目录(注册到zookeeper)

三、两种消费模型对比

1、分区消费模型更加灵活但是存在如下问题
(1)需要自己处理各种异常情况;
(2)需要自己管理offset以实现消息传递的其他语义;
kafka默认实现语义是“至少一次”的语义,如果需要实现其他语义,那么必须保存offset去实现。

消息传递语义:
(1)至少一次:为保证消息不会丢失,发送者向消费者发送至少一次的发送(有可能会重复。如生产者向消费者发送一个消息然后等待消费者回复确认消息,消费者消费到消息后发送确认消息,但是回复过程中由于网络原因没有发送成功,生产者没有接收到,生产者过一段时间后会再次发送改消息,即消费者可能会收到重复消息)。
(2)之多一次:即生产者(发送者)向消费者之多发送一次(所有消息最多发送一次,消费者未消费到生产者不会再发送,也就不管消息是否被消费者接收到,后续不再重复发送消息,可能丢失消息)
(3)有且仅有一次:生产者生产一条消息,消费者消费一条消息,一对一,消费者不会重复

2、组消费模型更加简单,但是不灵活
(1)不需要自己处理异常情况,不需要自己管理offset偏移量
(2)只能实现kafka默认的最少一次消息传递语义;
如果需要实现其他语义,那么用组消费模型不能达到(不能自己管理offset)。所有组消费模型不够灵活

快来成为我的朋友或合作伙伴,一起交流,一起进步!
QQ群:961179337
微信:lixiang6153
邮箱:lixx2048@163.com
公众号:IT技术快餐
更多资料等你来拿!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝壳里的沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值