Kafka中Consumer源码解读

这篇具有很好参考价值的文章主要介绍了Kafka中Consumer源码解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Consumer源码解读

本课程的核心技术点如下:

1、consumer初始化
2、如何选举Consumer Leader
3、Consumer Leader是如何制定分区方案

4、Consumer如何拉取数据
5、Consumer的自动偏移量提交

Consumer初始化

Kafka中Consumer源码解读,kafka

从KafkaConsumer的构造方法出发,我们跟踪到核心实现方法

Kafka中Consumer源码解读,kafka

这个方法的前面代码部分都是一些配置,我们分析源码要抓核心,我把核心代码给摘出来

NetworkClient

Consumer与Broker的核心通讯组件

Kafka中Consumer源码解读,kafka

ConsumerCoordinator

协调器,在Kafka消费中是组消费,协调器在具体进行消费之前要做很多的组织协调工作。

Kafka中Consumer源码解读,kafka

Fetcher

提取器,因为Kafka消费是拉数据的,所以这个Fetcher就是拉取数据的核心类

Kafka中Consumer源码解读,kafka

而在这个核心类中,我们发现有很多很多的参数设置,这些就跟我们平时进行消费的时候配置有关系了,这里我们挑一些核心重点参数来讲一讲

fetch.min.bytes

每次fetch请求时,server应该返回的最小字节数。如果没有足够的数据返回,请求会等待,直到足够的数据才会返回。缺省为1个字节。多消费者下,可以设大这个值,以降低broker的工作负载。

fetch.max.bytes

每次fetch请求时,server应该返回的最大字节数。这个参数决定了可以成功消费到的最大数据。

比如这个参数设置的是50M,那么consumer能成功消费50M以下的数据,但是最终会卡在消费大于10M的数据上无限重试。fetch.max.bytes一定要设置到大于等于最大单条数据的大小才行。

默认是50M

Kafka中Consumer源码解读,kafka

fetch.wait.max.ms

如果没有足够的数据能够满足fetch.min.bytes,则此项配置是指在应答fetch请求之前,server会阻塞的最大时间。缺省为500个毫秒。和上面的fetch.min.bytes结合起来,要么满足数据的大小,要么满足时间,就看哪个条件先满足。

这里说一下参数的默认值如何去找:

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

max.partition.fetch.bytes

指定了服务器从每个分区里返回给消费者的最大字节数,默认1MB。

假设一个主题有20个分区和5个消费者,那么每个消费者至少要有4MB的可用内存来接收记录,而且一旦有消费者崩溃,这个内存还需更大。注意,这个参数要比服务器的message.max.bytes更大,否则消费者可能无法读取消息。

备注:1、Kafka入门笔记

Kafka中Consumer源码解读,kafka

max.poll.records

控制每次poll方法返回的最大记录数量。

默认是500

Kafka中Consumer源码解读,kafka

如何选举Consumer Leader

回顾之前的内容

Kafka中Consumer源码解读,kafka

那么如何完成以上的逻辑的,我们跟踪代码:

Kafka中Consumer源码解读,kafka

1、消费者协调器与组协调器的通讯

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

对Broker的响应进行处理

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

1、消费者协调器发起入组请求

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Consumer Leader如何制定分区方案

回顾之前的内容

Kafka中Consumer源码解读,kafka

消费者分区策略

消费者参数

partition.assignment.strategy

分区分配给消费者的策略。默认为Range。允许自定义策略。

Range

把主题的连续分区分配给消费者。(如果分区数量无法被消费者整除、第一个消费者会分到更多分区)

RoundRobin

把主题的分区循环分配给消费者。

Kafka中Consumer源码解读,kafka

StickyAssignor

初始分区和RoundRobin是一样

粘性分区:每一次分配变更相对上一次分配做最少的变动.

目标:

1、分区的分配尽量的均衡

2、每一次重分配的结果尽量与上一次分配结果保持一致

当这两个目标发生冲突时,优先保证第一个目标

比如有3个消费者(C0、C1、C2)、4个topic(T0、T1、T2、T34),每个topic有2个分区(P1、P2)

Kafka中Consumer源码解读,kafka

C0: T0P0、T1P1、T3P0

C1: T0P1、T2P0、T3P1

C2: T1P0、T2P1

如果C1下线 、如果按照RoundRobin

Kafka中Consumer源码解读,kafka

C0: T0P0、T1P0、T2P0、T3P0

C2: T0P1、T1P1、T2P1、T3P1

对比之前

Kafka中Consumer源码解读,kafka

如果C1下线 、如果按照StickyAssignor

Kafka中Consumer源码解读,kafka

C0: T0P0、T1P1、T2P0、T3P0

C2: T0P1、T1P0、T2P1、T3P1

对比之前

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

自定义策略

extends 类AbstractPartitionAssignor,然后在消费者端增加参数:

properties.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,类.class.getName());

即可。

消费者分区策略源码分析

接着上个章节的代码。

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Consumer拉取数据

这里就是拉取数据,核心Fetch类

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

自动提交偏移量

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

Kafka中Consumer源码解读,kafka

当然,自动提交auto.commit.interval.ms

Kafka中Consumer源码解读,kafka

默认5s

Kafka中Consumer源码解读,kafka

从源码上也可以看出

maybeAutoCommitOffsetsAsync 最后这个就是poll的时候会自动提交,而且没到auto.commit.interval.ms间隔时间也不会提交,如果没到下次自动提交的时间也不会提交。

这个autoCommitIntervalMs就是auto.commit.interval.ms设置的文章来源地址https://www.toymoban.com/news/detail-703539.html

到了这里,关于Kafka中Consumer源码解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简单聊聊Kafka的Consumer

    我们知道消息队列一般有两种实现方式,(1)Push(推模式) (2)Pull(拉模式),那么 Kafka Consumer 究竟采用哪种方式进行消费的呢? 其实 Kafka Consumer 采用的是主动拉取 Broker 数据进行消费的即 Pull 模式 。这两种方式各有优劣,我们来分析一下: 1)、为什么不采用Push模式?**如果是选择

    2024年01月15日
    浏览(28)
  • kafka之消费者(Consumer)

    1、kafka消费者消费方式         kafka 的消费者(Consumer)采用 pull 的方式主动从 broker 中拉取数据,这种不足之处会有:当 broker 中没有消息时,消费者会不断循环取数据,一直返回空数据。 2、消费者组 Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组

    2024年01月20日
    浏览(32)
  • Kafka整理-Consumer(消费者)

    在Apache Kafka中,消费者(Consumer)是负责从Kafka的主题(Topics)读取数据的客户端应用程序。Kafka消费者的主要特点和工作原理如下: 1、订阅主题: 消费者可以订阅一个或多个Kafka主题,并从中读取数据。 2、消费者群组(Consumer Groups): 消费者可以组成消费者群组。在一个

    2024年04月10日
    浏览(40)
  • SpringBoot中使用Kafka报错:Failed to construct kafka consumer

    在SpringBoot项目中使用了Kafka,在启动的过程中报错 原因在报错中很清晰了,消费者反序列化使用的类错误 把spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.IntegerSerializer 改为 spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.IntegerDeserializer 就好了

    2024年02月11日
    浏览(33)
  • kafka-consumer-groups.sh

    通过 kafka-consumer-groups.sh 脚本查看或变更消费组的信息。 查看消费者组信息 查看指定消费者组的消费位移 消费组一共有 Dead 、Empty 、PreparingRebalance 、CompletingRebalance 、Stable 这几种状态,正常情况下, 一个具有消费者成员的消费组的状态为Stable 。可以通过 state 参数来查看消

    2024年02月06日
    浏览(35)
  • kafka-consumer-消费者代码实例

    目录 1 消费一个主题 2 消费一个分区 3 消费者组案例 消费topic为first的消息。 应用场景:当生产者将所有消息发往特定的某个主题分区。 消费first主题0号分区代码: 测试同一个主题的分区数据,只能由一个消费者组中的一个消费者进行消费。 创建三个消费者对某一分区进行

    2024年02月11日
    浏览(30)
  • Kafka Consumer auto.offset.reset 理解

    先来一下 kafka 官网对于 auto.offset.reset 的解释: 上面的描述挺准确的,但如果没有相关背景会感觉很懵逼。网上也有很多文章讲这个东西并给了很多例子,看了之后总感觉没有理解清楚。 先来看一下怎么查看消费者 group 的 offset 情况: 每个 consumer group 会为每个消费的 parti

    2024年02月13日
    浏览(29)
  • Kafka-消费者-Consumer Group Rebalance设计

    在同一个Consumer Group中,同一个Topic的不同分区会分配给不同的消费者进行消费,那么为消费者分配分区的操作是在Kafka服务端完成的吗?分区是如何进行分配呢?下面来分析Rebalance操作的原理。 Kafka最开始的解决方案是通过ZooKeeper的Watcher实现的。 每个Consumer Group在ZooKeeper下都维

    2024年01月19日
    浏览(43)
  • Kafka Producer/Consumer 关系解释及测试demo

    Kafka的生产者(Producer)和消费者(Consumer)的关系,可以通过一个餐厅的例子来形象地说明。 想象一个忙碌的餐厅,这里有: 厨师(Producers) :负责准备美味的菜肴。 服务台(Kafka Topic) :菜肴准备好后,厨师会将它们放到服务台上,服务台有多个部分,每部分代表一个不

    2024年02月19日
    浏览(20)
  • 【项目实战】Kafka 重平衡 Consumer Group Rebalance 机制

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包