kafka Consumer详解

kafka的consumerConnector.createMessageStreams 方法源码分析 Consumer.create(consumerConfig) val topicMessageStreams = consumerConnector.createMessageStreams( topics, keyDecoder, valueDecoder) 这里的createMessageStreams调用的是子类ZookeeperConsumerConnector 的实现 阅读详情

1.ZookeeperConsumer架构

ZookeeperConsumer类中consumer运行过程架构图:

                                                                                                图1

过程分析:

ConsumerGroupExample类

2.消费者线程(consumer thread),队列,拉取线程(fetch thread)三者之间关系

每一个topic至少需要创建一个consumer thread,如果有多个partitions,则可以创建多个consumer thread线程,consumer thread>==partitions数量,否则会有consumer thread空闲。

部分代码示例如下:

ConsumerConnector consumer

consumer = kafka.consumer.Consumer.createJavaConsumerConnector(

            createConsumerConfig());

 Map<String, Integer> topicCountMap = new HashMap<String, Integer>();

 topicCountMap.put("test-string-topic", new Integer(1));  //value表示consumer thread线程数量

 Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);

具体说明一下三者关系:

(1).topic的partitions分布规则

paritions是安装kafka brokerId有序分配的。

例如现在有三个node安装了kafka broker服务端程序,brokerId分别设置为1,2,3,现在准备一个topic为test-string-topic,并且分配12个partitons,此时partitions的kafka broker节点分布情况为 ,partitions索引编号为0,3,6,9等4个partitions在brokerId=1上,1,4,7,10在brokerId=2上,2,5,8,11在brokerId=3上。

创建consumer thread

consumer thread数量与BlockingQueue一一对应。

a.当consumer thread count=1时

此时有一个blockingQueue1,三个fetch thread线程,该topic分布在几个node上就有几个fetch thread,每个fetch thread会于kafka broker建立一个连接。3个fetch thread线程去拉取消息数据,最终放到blockingQueue1中,等待consumer thread来消费。

消费者线程,缓冲队列,partitions分布列表如下

consumer线程

Blocking Queue

partitions

consumer thread1

blockingQueue1

0,1,2,3,4,5,6,7,8,9,10,11

fetch thread与partitions分布列表如下

fetch线程

partitions

fetch thread1

0,3,6,9

fetch thread2

1,4,7,10

fetch thread3

2,5,8,11



b. 当consumer thread count=2时

此时有consumerThread1和consumerThread2分别对应2个队列blockingQueue1,blockingQueue2,这2个消费者线程消费partitions依次为:0,1,2,3,4,5与6,7,8,9,10,11;消费者线程,缓冲队列,partitions分布列表如下

consumer线程

Blocking Queue

partitions

consumer thread1

blockingQueue1

0,1,2,3,4,5

consumer thread2

blockingQueue2

6,7,8,9,10,11


fetch thread与partitions分布列表如下

fetch线程

partitions

fetch thread1

0,3,6,9

fetch thread2

1,4,7,10

fetch thread3

2,5,8,11


c. 当consumer thread count=4时

消费者线程,缓冲队列,partitions分布列表如下

consumer线程

Blocking Queue

partitions

consumer thread1

blockingQueue1

0,1,2

consumer thread2

blockingQueue2

3,4,5

consumer thread3

blockingQueue3

6,7,8

consumer thread4

blockingQueue4

9,10,11

fetch thread与partitions分布列表如下

同上

同理当消费线程consumer thread count=n,都是安装上述分布规则来处理的。


3.consumer消息线程以及队列创建逻辑

运用ZookeeperConsumerConnector类创建多线程并行消费测试类,ConsumerGroupExample类初始化,调用createMessageStreams方法,实际是在consume方法处理的逻辑,创建KafkaStream,以及阻塞队列(LinkedBlockingQueue),KafkaStream与队列个数一一对应,消费者线程数量决定阻塞队列的个数。

registerConsumerInZK()方法:设置消费者组,注册消费者信息consumerIdString到zookeeper上。

consumerIdString产生规则部分代码如下:

[java]  view plain  copy
  1. String consumerUuid = null;  
  2. if(config.consumerId!=null && config.consumerId)  
  3.  consumerUuid = consumerId;  
  4. else {   
  5.  String uuid = UUID.randomUUID()  
  6.    
  7.   consumerUuid = "%s-%d-%s".format(  
  8.     InetAddress.getLocalHost.getHostName, System.currentTimeMillis,  
  9.     uuid.getMostSignificantBits().toHexString.substring(0,8));  
  10. }      
  11. String consumerIdString =  config.groupId + "_" + consumerUuid;  

kafka zookeeper注册模型结构或存储结构如下:

kafka在zookeeper中存储结构           

说明:目前把kafka中绝大部分存储模型都列表出来了,当前还有少量不常使用的,暂时还没有列举,后续会加上。


consumer初始化逻辑处理:

1.实例化并注册loadBalancerListener监听,ZKRebalancerListener监听consumerIdString状态变化

 

触发consumer reblance条件如下几个:

ZKRebalancerListener:当/kafka01/consumer/[consumer-group]/ids子节点变化时,会触发

ZKTopicPartitionChangeListener:当该topic的partitions发生变化时,会触发。

      val topicPath = "/kafka01/brokers/topics" + "/" + "topic-1"
      zkClient.subscribeDataChanges(topicPath, topicPartitionChangeListener)


原文:http://blog.youkuaiyun.com/lizhitao/article/details/38458631

【kafka原理】聊聊 Kafka Consumer 那点事 今天我们主要来聊聊 Kafka Consumer 即消费者的内部底层原理设计思想。 1、Consumer之总体概述 在 Kafka 中, 我们把消费消息的一方称为 Consumer 即 消费者, 它是 Kafka 的核心组件之一。它的主要功能是将 Producer 生产的消息进行消费处理,完成消费任务。那么这些 Producer 产生的消息是怎么被 Consumer 消费的呢?又是基于何种消费方式进行消费,分区分配策略都有哪些,消费者组以及重平衡机制是如何处理的,偏移量如何提交和存储,消费进度. 阅读详情

相关推荐

Kafka系列(六):Kafka之Consumer消费者

Kafka之Consumer消费者Consumer概述消费者消费者组位移(offset)位移提交消费者重组SpringBoot集成Kafka导入依赖参数自定义配置消费消息消息测试Consumer相关消息轮询位移管理consumer位移管理自动提交和手动提交 Consumer概述 消费者 consumer是读取kafka集群某些topic消息的应用程序。 消费者组 消费者用一个消费者组名来标记自己,topic的每条消息都只会被发送到每个订阅它的消费者组的一个消费者实例上。 我们知道kafka同时支持基于队列和

weixin_42575542的博客 2236

Kafka consumer

Kafka consumer consumer概览 消费者组 消费者组定义:消费者使用一个消费者组名(即group.id)来标记自己,topic的每条消息都只会被发送到每个订阅它的消费者组的一个消费者实例上 一个consumer group可能有若干个consumer实例 对于同一个group而言,topic的每条消息只能被发送到group下的一个consumer实例上 topic消息可以被发送到多个group中 Kafka同时支持基于队列和基于发布/订阅的两种消息引擎模型,事实上Kafka是通过con

github_38730134的博客 5737

【Kafka】Kafka Consumer消费模型

一. Kafka简介 上面是Kafka的一个架构图,包括几个部分 Producer: 消息生产者,向Broker发送消息。 Consumer: 消息消费者,从Broker读取消息。 Broker: 处理节点,一个Kafka节点就是一个Broker,多个Broker可以组成一个Kafka集群。 Topic: 主题,Kafka根据Topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一...

藏经阁 | 玄苦 2590

apache kafka源码分析走读-ZookeeperConsumerConnector分析

ZookeeperConsumer类中consumer运行过过程架构分析

李志涛的专栏 8834

Kafka consumer API简介

Kafka采用生产/消费模型。Kafka Client从kafka集群中消费记录。该SDK具备以下特性: 1. 屏蔽了Server集群的错误处理; 2. 不用感知服务器端分区的迁移; 3. 利用consumer groups可以实现消费端的负载均衡; 客户端保持了和Brokers的连接,如果连接异常关闭,可能引起连接的泄露。客户端为非线程安全模型,具体参见“多线程处理”相关描述。

石权的博客 1万+

java调用Kafka的Consumer

之前项目中有个需求技术上需要用到Kafka,另一部门的同事通过Kafka的Producer将数据以json的格式发送到服务器上的broker,双方约定一个topic,而我通过Consumer消费服务器上broker的约定topic的数据。Kafka是基于topic的消息生产消费模式,Producer是生产者,生产特定topic的消息,Consumer是消费者,消费特定topic的消息。Kafka的

duguwuyi的专栏 1422

kafka-consumer参数详解

consumer参数 主要介绍下kafka的consumer配置参数,只取了其中的一部分常用的,后续的有时间,也会补充一些,更多的详细参数,可以参考《kafka官网连接》,参数的内容,主要是选取《apache kafka实战》中的一些讲解和官网相互参看 bootstrap.servers 和 Java 版本 producer 相同,这是必须要指定的参数。该参数指定了一组 host:port ...

鸭鸭的博客 1万+

Kafka Consumer 简易配置

@Bean(value = "kafkaConsumer", destroyMethod = "close") public KafkaConsumer<String, String> getKafkaConsumer() throws Exception { Properties properties = new Properties(); properties.putAll(xxx.getClientConfigs(kafkaClientId,kafkaUsername,kaf...

乔治大哥的博客 2669

Kafka Consumer原理分析及特性总结

Kafka核心机制与消费者原理解析 本文系统剖析了Kafka的核心运行机制,重点关注消费者原理与高性能设计。在消费者部分,详细阐述了Offset的存储机制(特殊Topic __consumer_offsets)、三种重置策略(earliest/latest/none)及提交方式(自动/手动)。深入解析了消费者与分区的动态分配关系,包括三种分配策略(Range/RoundRobin/Sticky)和ReBalance触发流程(JoinGroup/SyncGroup协议)。同时揭示了Kafka百万级TPS的四大

Nicky's blog 1151

kafka 多台consumer 实验

最近和实验室哥们儿在搞storm kafka的东西。 两者始终不能连接起来。 突然想到以前自己写consumer的demo的时候,仅仅是一台机子在pull 数据,从来没有试过用属于同一个group的consumer(部署在多台机子上)去pull数据,于是今天准备做个实验。直接上consumer的代码,这里用的是consumer的high-level接口。 package cn.cadal

HongXin的Blog 3283

波束管理 Beam Management

Beam Management in 5G NR   波束管理,是5G NR中基于信道质量来动态选择每个UE和gNB之间以什么方向和频率的波束beam来进行通信。   背景   5G NR(New Radio)支持非常高的数据速率和更低的延迟。5G NR支持FR1和FR2频段,FR1为亚6 GHz(450至6000 MHz);FR2为毫米波段(24.25 GHz至52.6 GHz)。   由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。

最忆是江南的博客 5826

Kafka消费组(consumer group)详解

一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少。最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时机成熟了,于是写下这篇文章讨论并总结一下新版本consumer的些许设计理念,希望能把consumer这点事说清楚,从而对广大使用者有所帮助。 在开始之前,我想花一点时间先来明确一些概念和术语,这...

不见其长,日有所长 2万+

深入解析XTEA加密算法的核心机制与优化策略

本文深入解析XTEA加密算法的核心机制与优化策略,详细介绍了XTEA在嵌入式系统和资源受限环境中的优势,包括其高效的加解密速度和低资源消耗。文章还探讨了XTEA的轮函数设计、关键参数优化策略以及实战应用中的性能对比,为开发者提供了安全增强方案和优化技巧。

k8l9m0n的博客 242

Kafka Consumer 与 Consumer Group 详解

Kafka 消费者组是可扩展并具有容错性的消费者机制消费者组有多个消费者或者消费者实例,它们共享一个公共的 Group ID。理想情况,消费者实例应该等于分区数量。

showyoui的博客 1315

OI 生涯回忆录 《Pilgrimage》

前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不

cz_xuyixuan的博客 1万+

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 256

Kafka Consumer Group 详解:原理、机制与应用实践

在分布式消息系统中,如何高效地消费消息是一个核心问题。Apache Kafka 通过Consumer Group(消费者组)这一精妙的设计,完美解决了多个消费者协同消费、负载均衡、故障转移等问题。本文将深入剖析 Consumer Group 的工作原理、核心机制,并通过流程图和代码示例帮助读者全面理解。是 Kafka 中逻辑上的消费者集群,由一个或多个消费者实例组成。这些消费者实例共同消费一个或多个主题(Topic)的所有消息。每个 Consumer Group 有一个唯一的 Group ID 进行标识。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3541

机器学习面试笔试求职必背!八股文(1/5)

算法工程师,技术软件类求职机器学习必背八股文 更多算法/业务/HR面等笔试题面试题 —— >个性签名自取! 1. 特征工程: 1.1 为什么要对特征做归一化处理: Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术。特征间的单位(尺度)可能不同,比如身高和体重,比如摄氏度和华氏度,比如房屋面积和房间数,一个特征的变化范围可能是[ 1000 , 10000 ] [1000, 10000][1000,10000],另一个特征的变化范围可能是[ −.

大厂offer宝典 1万+

深入理解Kafka Consumer:从理论到实战

从拉取模型与推模型的对比,到 Consumer Group 机制中的 Rebalance 流程和 Offset 管理,再到新旧消费 API 的差异,以及在实时日志解析服务中的实战应用,每一个环节都揭示了 Kafka 在消息处理领域的强大能力和灵活性。​Consumer Group 机制通过 Rebalance 实现了动态的负载均衡和故障恢复,Offset 管理确保了消费进度的可靠记录。

m0_71836706的博客 1122

(SEED-Lab)Buffer Overflow Vulnerability Lab缓冲区溢出实验

(SEED-Lab)Buffer Overflow Vulnerability Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录一、实验目的二、实验步骤与结果2.1 环境初始化2.2 Task1 运行shellcode2.3漏洞程序2.4 Task 22.5 Task 3: ASLR2.6 Task 4: Stack Guard2.7 Task 5:不可执行栈三、参考文献 一、实验目的 理解缓冲区溢出攻击的原理以及如何实施攻击 理解针对缓冲区溢出的防御措施

lunan的博客 8981

ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command ‘[‘D:\\.espressif\\python_env\\idf5.4_py3.

ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command '['D:\\.espressif\\python_env\\idf5.4_py3.

772

【Kafka】Kafka源码解析之Consumer过程解读

【Kafka】Kafka源码解析之Consumer过程解读

芝兰生于深谷,不以无人而不芳 1038

【Hermes Agent】2026 Hermes Agent 最新入门级实战指南:从原理、部署、模型配置到落地 Demo

当下 Vibe Coding、AI 自动化时代,单纯对话大模型已经没有竞争力,

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 244

Kafka 核心组件详解:Consumer(消息消费者)

摘要: Kafka Consumer 是采用 Pull 模式的消息消费者,通过主动拉取机制实现高吞吐与流量控制。核心机制包括:① 消费组实现负载均衡(同组竞争)或广播(异组全量);② Offset管理记录消费进度,支持手动/自动提交;③ Rebalance动态分配分区,需优化心跳与会话超时避免抖动。关键配置包括group.id、auto.offset.reset及反序列化器。相比Push模式,Kafka的Pull设计更适配大数据场景,但需注意消息积压、重复消费(需幂等处理)等问题。消费者通过分区分配和偏移量

csdn_tom_168的博客 1006

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

kafka Consumer Group

kafka Consumer Group 注:本文主要参考极客时间专栏 Kafka核心技术与实战 1.Consumer Group 作用: Consumer Group 是kafka提供的可扩展且具有容错性的机制。 Consumer Group 图解如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4HhRbNW-1598233269215)(/Users/zy1994/Library/Containers/com.tencent.xinWeChat/Data/Libr

weixin_39034379的博客 1297

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: [Kafka] - Kafka基本操作命令
下一篇: 实现一个很简单的计时器类
Next__One
博客等级 码龄9年 14粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值