kafka读书笔记(三)浅谈消费者

kafka读书笔记(三)浅谈消费者,第1张

kafka读书笔记(三)浅谈消费

文章目录

消费者和消费者组消费者组对于消费者的影响消费者组对消息投递模式的影响客户端开发
消费者负责订阅kafka中的主题,并且从订阅的主题上拉取消息。同时, 每个消费者都隶属于,并且仅仅隶属于一个消费者组。每一个消费者组都会有一个唯一的名称,消费者在消费前需要指定所属消费组的名称。

消费者和消费者组

消费者组的相关信息存储于kafka的集群中,一个消费者组下的信息包括:
消费者组下有哪些消费者(通过消费者id标识)
表示消费者组对主题分区消费程度的offset(由消费者提交,由于消费者组内只有一个消费者在消费,所以offset的粒度是消费者组级别的)
记录主题分区被哪个消费者所消费,当有消费者加入时触发创建。

消费者组对于消费者的影响

每一个主题分区只能被一个消费组中的一个消费者所消费。
kafka的主题分区分配规则以消费者组为单位

消费者组对消息投递模式的影响

对于消费中间件,一般来说有两种投递模式:点对点模式和发布订阅(广播)模式。
由于消费者组概念的存在,kafka投递模式可以在点对点模式和发布订阅模式这个两个极端之间调整:
如果所有消费者都隶属于一个消费者组,每条消息只会被一个消费者消费,相当于点对点模式。
如果所有的消费者都隶属于不同的消费者组,那么一条消息会被所有消费者消费,相当于发布订阅(广播)模式。

客户端开发

一个正常的消费逻辑需要具备以下几个步骤:

    配置客户端参数,创建相应的消费者实例订阅主题分区拉取消息并消费提交消费位移关闭消费者实例

配置客户端参数:
bootstrap.servers:kafka的broker列表,指明ip和port
group.id:消费者隶属消费组的名称
key.deserializer和vaule.deserializer:key和value的反序列化器

订阅主题分区:
客户端可以指定需要订阅的主题,也可以指定特定的主题分区,具体的主题分区信息可以通过通过向集群查询获得。客户端在未指定具体分区时会由分配规则分配分区。
客户端可以主动解除订阅。

反序列化:
与生产者的序列化器搭配使用,开发者可以自定义反序列化器。

拉取消息并消费:
kafka的消费者以轮询的拉模式消费消息,开发者可以指定轮询的间隔。消费者的拉取动作(poll函数)的内部实现十分复杂,涉及到消费位移、消费者协调器、组协调器、消费者的选举、分区分配的分发、再均衡的逻辑、心跳等内容,之后的章节会提到这些内容。

位移提交:
位移offset在主题分区范围内递增且唯一,每个offset对应唯一一条消息,消息之间通过offset保证顺序。
poll返回的是未提交的消息,提交的时机(消费前、消费后)和方式(同步、异步、批量)由消费者决定,提交的消费位移会被集群持久化到磁盘。
假如集群中没有相应的offset信息,或者有特殊的需求(比如回溯)的情况下,消费者可以通过seek方法从特定位置读取消息。

消费者拦截器:
消费者会在poll方法之前调用拦截器的onConsume方法来对消息进行定制化 *** 作,比如修改和过滤。

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

原文地址: http://outofmemory.cn/zaji/5718733.html

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

发表评论

登录后才能评论

评论列表(0条)

保存