Kafka消费者——从Kafka读取数据

目录

前言:

1、KafkaConsumer概念

1.1、消费者和消费者群组

1.2 、消费者群组和分区再均衡

2、创建Kafka消费者

3、订阅主题

4、轮询

5、消费者的配置

6、提交和偏移量

7、再均衡监听器

8、从特定偏移量处开始处理记录

9、如何退出

10、反序列化器


前言:

应用程序使用 KafkaConsumer Kafka 订阅主题,并从订阅的主题上接收消息。
Kafka 读取数据不同于从其他消息系统读取数据。

1、KafkaConsumer概念

1.1、消费者和消费者群组

假设我们有一个应用程序需要从一个 Kafka 主题读取消息并验证这些消息,然后再把它们 保存起来。应用程序需要创建一个消费者对象,订阅主题并开始接收消息,然后验证消息 并保存结果。过了一阵子,生产者往主题写入消息的速度超过了应用程序验证数据的速度,这个时候该怎么办?如果只使用单个消费者处理消息,应用程序会远跟不上消息生成 的速度。显然,此时很有必要对消费者进行横向伸缩。就像多个生产者可以向相同的主题 写入消息一样,我们也可以使用多个消费者从同一个主题读取消息,对消息进行分流。
Kafka 消费者从属于 消费者群组 。一个群组里的消费者订阅的是同一个主题,每个消费者 接收主题一部分分区的消息。
假设主题 T1 4 个分区,我们创建了消费者 C1 ,它是群组 G1 里唯一的消费者,我们用 它订阅主题 T1
消费者 C1 将收到主题 T1 全部 4 个分区的消息,如下图1-1图 所示。

 

图1-1、一个消费者收到四个分区的消息

如果在群组 G1 里新增一个消费者 C2 ,那么每个消费者将分别从两个分区接收消息。我们 假设消费者 C1 接收分区 0 和分区 2 的消息,消费者 C2 接收分区 1 和分区 3 的消息,如图 1-2 所示。
图1-2、两个消费者收到四个分区的消息
 
如果群组 G1 4 个消费者,那么每个消费者可以分配到一个分区,如图 1 -3 所示。
图1-3、四个消费者收到四个分区的消息
 
如果我们往群组里添加更多的消费者,超过主题的分区数量,那么有一部分消费者就会被 闲置,不会接收到任何消息,如图 1-4 所示。
图1-4、五个消费者收到四个分区的消息
 
往群组里增加消费者是横向伸缩消费能力的主要方式。 Kafka 消费者经常会做一些高延迟 的操作,比如把数据写到数据库或 HDFS ,或者使用数据进行比较耗时的计算。在这些情 况下,单个消费者无法跟上数据生成的速度,所以可以增加更多的消费者,让它们分担负 载,每个消费者只处理部分分区的消息,这就是横向伸缩的主要手段。我们有必要为主题 创建大量的分区,在负载增长时可以加入更多的消费者。不过要注意, 不要让消费者的数 量超过主题分区的数量 ,多余的消费者只会被闲置。
除了通过增加消费者来横向伸缩单个应用程序外,还经常出现多个应用程序从同一个主题 读取数据的情况。实际上,Kafka 设计的主要目标之一,就是要让 Kafka 主题里的数据能够满足企业各种应用场景的需求。在这些场景里,每个应用程序可以获取到所有的消息, 而不只是其中的一部分。只要保证每个应用程序有自己的消费者群组,就可以让它们获取 到主题所有的消息。不同于传统的消息系统,横向伸缩 Kafka 消费者和消费者群组并不会对性能造成负面影响。
在上面的例子里,如果新增一个只包含一个消费者的群组 G2 ,那么这个消费者将从主题 T1 上接收所有的消息,与群组 G1 之间互不影响。群组 G2 可以增加更多的消费者,每个消费者可以消费若干个分区,就像群组 G1 那样,如图 1 -5 所示。
总的来说,群组 G2 还是会接收到所有消息,不管有没有其他群组存在。
简而言之,为每一个需要获取一个或多个主题全部消息的应用程序创建一个消费者群组,然后往群组里添加消费者来伸缩读取能力和处理能力,群组里的每个消费者只处理一部分消息。
图1-5、两个消费者对应一个主题

1.2 、消费者群组和分区再均衡

 

群组里的消费者共同读取主题的分区。一个新的消费者加 入群组时,它读取的是原本由其他消费者读取的消息。当一个消费者被关闭或发生崩溃 时,它就离开群组,原本由它读取的分区将由群组里的其他消费者来读取。
在主题发生变 化时,比如管理员添加了新的分区,会发生分区重分配。分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再均衡。再均衡非常重要,它为消费者群组带来了高可用性和伸缩性(我们可以放心地添加或移除消费者), 不过在正常情况下,我们并不希望发生这样的行为。在再均衡期间,消费者无法读取消息,造成整个群组一小段时间的不可用。另外,当分区被重新分配给另一个消费者时,消费者当前的读取状态会丢失,它有可能还需要去刷新缓存,在它重新恢复状态之前会拖慢应用程序。

2、创建Kafka消费者

3、订阅主题

4、轮询

5、消费者的配置

6、提交和偏移量

7、再均衡监听器

8、从特定偏移量处开始处理记录

9、如何退出

10、反序列化器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangvalue

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

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

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

打赏作者

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

抵扣说明:

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

余额充值