Kafka基本概念及消费流程

news2024/11/16 22:34:16

Kafka是消息中间件的一种,相较于其他消息中间件,其以极高的吞吐量闻名,常用于构建实时数据管道和流应用,能够处理高吞吐量的数据流。以下是Kafka中的重要概念:

1. 生产者

生产者是向Kafka主题发送消息的客户端。生产者负责将Kafka写入数据,消息的分区策略(如基于消息键、轮询或自定义分区逻辑)以及将数据写入Kafka的哪个主题,这些都由消费者的配置决定来决定。

2. 主题

所有消息中间件都有一种传输消息的结构,kafka中传输消息的结构为主题,消息的传输以主题为单位,由生产者将数据写入特定的主题,在由消费者由特定的主题取出,即可完成一次消息的传输。

3. 分区

为了提高数据进入主题的速度,Kafka将一个主题细分为多个区,每个区都是一个独立的线程,可以独立接受生产者生产的消息,这样大大提高了客户端向Kafka传输数据的速度。

4. 消费者

消费者是从Kafka主题中获取消息的客户端。消费者通常会订阅一个或多个主题,然后从中获取消息并进行处理。消费者可以独立工作,也可以作为消费者组的一部分共同消费数据。

消费者从Kafka消费数据时,获取完数据后,数据并不会消失,消息依旧存储在Kafka主题中。消费者能够在下一次消费时继续消费后续数据,这是得益于Kafka内部维护的特殊主题__consumer_offsets,该主题记录了每个消费者组的分区和其偏移量之间的关系(单个独立的消费者自己属于一个消费者组)。在每次消费之前,消费者会从__consumer_offsets主题中查找自己所属的消费者组的分区的偏移量,并从对应的位置开始消费。消费完成后,消费者会更新这些偏移量并提交到__consumer_offsets主题中。

这也意味着多个消费者组可以同时消费同一个主题而互不干扰,因为每个消费者组在__consumer_offsets主题中都有独立的偏移量记录。因此,即使多个消费者组同时消费同一主题,它们也不会相互影响,各自消费的数据流是独立的。

偏移量是消息在分区中的唯一标识符。每个分区内的消息都有一个连续的偏移量,当消费者从分区中拉取消息时,它会记录已经消费到的最新偏移量,确保下一次消费时能够继续从上次的位置开始。

5. 消费者组

Kafka通过分区提高一个主题数据写入的速度,而消费者组则是Kafka用来提高数据获取速度的手段,消费者组通过建立一个多个消费者的组通过使用__consumer_offsets主题中同一个偏移量,共同消费一个主题,以提高数据消费的速度。

 消费者组加入和离开消费者组流程

1. 消费者加入消费者组

  • 新消费者实例启动:一个新的消费者实例启动,并使用与现有消费者相同的group.id(即消费者组ID)。这个新消费者会向Kafka的消费者组协调器发送一个加入请求,表明它想加入这个消费者组。
  • 分区重新平衡:一旦新的消费者加入,消费者组内的所有分区可能会被重新分配。Kafka会尝试将主题的分区在消费者组中的所有消费者之间重新分配,以平衡负载。例如,如果一个消费者组有6个分区,原本有2个消费者在处理这些分区,Kafka的消费者组协调器会将每三个分区分配给一个消费者,当加入一个新的消费者后,这6个分区就会被重新分配到3个消费者,每个消费者处理2个分区。
  • 新的分配通知:重新平衡后,消费者组协调器会通知每个消费者它现在负责的分区。新加入的消费者会开始从它被分配到的分区中消费消息。

2. 消费者离开消费者组

  • 消费者实例停止:一个消费者实例停止运行、崩溃、或由于网络问题与Kafka断开连接。此时,该消费者将离开消费者组。
  • 分区重新分配:消费者离开消费者组后,消费者组协调器会触发重新平衡过程,将离开消费者原本负责的分区重新分配给剩余的消费者。这确保了所有分区都有消费者来处理。
  • 其他消费者的负载增加:重新平衡后,剩下的消费者会接手离开消费者的分区,从而增加它们的处理负载。

整个消费流程如下图所示

Kafka通过分区和消费者组大大提高了数据写入和读取的速度,除了提高并发以外,吞吐量的提高还要关注带宽和磁盘IO速率,如果网络传输数据或磁盘存取的速度不够快,即使并发量再多,也无法提高性能。但是这两者属于客观因素,kafka本身不能控制,那么kafka如何在固定带宽和磁盘IO速率的情况下,传输更多的数据呢?答案是批处理。

批处理

Kafka为了提高吞吐量,通常会使用**批量处理(batching)**的方式来发送和接收消息。这种机制在生产者和消费者两端都有体现。下面详细解释一下这种机制以及它如何提高Kafka的吞吐量。

1. 生产者端的批量处理

当生产者发送消息时,Kafka允许生产者将多个消息批量打包在一起,然后作为一个单元发送到Kafka。生产者会将消息暂时存储在一个缓冲区中,当缓冲区达到一定的大小(由配置参数决定),或者等待时间达到一个预设的阈值时(如配置的linger.ms参数),生产者会将缓冲区中的消息打包成一个批次,发送到Kafka broker。

通过这种方式,消息一次性发送到服务器,节省了网络请求次数,也节省了磁盘IO过程中的系统调用次数,提高了Kafka的性能。

2. 消费者端的批量处理

在消费者端,Kafka同样允许消费者批量拉取消息,即每次从Kafka broker获取一批消息,而不是每次只获取一条消费者可以设置每次拉取的消息数量上限,从而在单次请求中获得多个消息。

消费者批量拉取数据同样节省网络请求次数,节省磁盘IO过程中的系统调用。

批量处理虽然能够显著提高吞吐量,但也引入了一定的延迟。例如,如果生产者为了等待更多的消息来填满批次而延迟发送,那么这段等待时间会引入额外的延迟。实际生产过程中需要开发者自行调整配置,权衡性能和延迟。

Kafka性能非常优越,但这也意味着它会消耗大量的资源,包括带宽、内存、CPU和磁盘资源。由于Kafka的复杂性和高性能需求,它的运维难度较大,运维人员需要在实际服务器环境中进行配置调整,以适应具体的使用场景和环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

登录 k8s-Dashboard 显示 Your connection is not private

文章目录 一、背景二、解决方案 一、背景 部署好 kubernetes-Dashboard 后使用 master节点的 ipport 登录 Dashboard 显示 Your connection is not private 无论是 Edge 还是 Google Chrome 都是这样的情况 二、解决方案 点击网页空白处,英文输入法输入&#xf…

论文解读:LONGWRITER: UNLEASHING 10,000+ WORD GENERATION FROM LONG CONTEXT LLMS

摘要 现象:当前的大预言模型可以接受超过100,000个tokens的输入,但是却难以生成超过2000个token的输出。 原因:监督微调过程(SFT)中看到的样本没有足够长的样本。 解决方法: Agent Write,可以将长任务分解为子任务&a…

为什么MCU I2C波形中会出现的脉冲毛刺?

在I2C的波形中,经常会发现有这样的脉冲毛刺,会被认为是干扰或者器件不正常。 看到这个波形时,可以先数一下出现在第几个clock的位置,如果出现在第9个clock的低电平期间,就不是干扰或者器件异常导致。 在I2C的协议中&a…

Java并发类的主要API方法-CountDownLatch和CyclicBarrier

1.概念介绍 CountDownLatch 是一个计数器,计数器的初始值由创建它时指定。每次调用 countDown() 方法时,计数器会减1,直到计数器值变为0时,所有调用 await() 的线程都会被唤醒继续执行。 CyclicBarrier 是 Java 中另一个常用的同…

基于CDIO概念的人工智能物联网系统开发与实施的人才培养研究

目录 1. 引言(Introduction) 2. AIoT技术及其培训特点(The Characteristics of AIOT and Its Training) 3. 基于CDIO概念的AIoT课程改革(CDIO Concept-based Reform of AIOT Course) 4. AIoT课程内容安…

SweetAlert2

1. SweetAlert2 SweetAlert2是一个基于JavaScript的库, 用于在网页上替换标准的警告框(alert), 确认框(confirm)和提示框(prompt), 并提供更加美观和用户友好的界面.需要在项目中引入SweetAlert2, 可以通过CDN链接或者将库文件下载到你的项目中来实现这一点. 通过CDN引入:<…

C++:stack类(vector和list优缺点、deque)

目录 前言 数据结构 deque vector和list的优缺点 push pop top size empty 完整代码 前言 stack类就是数据结构中的栈 C数据结构&#xff1a;栈-CSDN博客 stack类所拥有的函数相比与string、vector和list类都少很多&#xff0c;这是因为栈这个数据结构是后进先出的…

SPRING09_ Bean后置处理器创建过程、SmartInstantiationAwareBeanPostProcessor预测方法调用

文章目录 ①. Bean后置处理器创建过程②. SmartInstantiationAwareBeanPostProcessor预测方法调用 ①. Bean后置处理器创建过程 ①. 坏境准备,在BeanPostProcessor的无参构造器、postProcessBeforeInitialization以及postProcessAfterInitialization打上断点.以xml的方式启动容…

秋招突击——8/15——新作{最大子数组和、合并区间、转轮数组、除自身以外的数组的乘积}

文章目录 引言新作最大子数组和个人实现参考实现 合并区间个人实现短板补充——自定义排序标准 参考实现 转轮数组最终实现 除自身以外数组的乘积个人实现 总结 引言 以前刷题的方式方法有问题&#xff0c;花太多时间了&#xff0c;应该先过一遍&#xff0c;然后再针对特定的题…

第一百九十四节 Java集合教程 - Java优先级队列

Java集合教程 - Java优先级队列 优先级队列是其中每个元素具有相关联的优先级的队列。具有最高优先级的元素将从队列中删除。 PriorityQueue 是一个实现类对于Java Collection Framework中的无界优先级队列。 我们可以使用在每个元素中实现的 Comparable 接口作为其优先事项。…

C# OnnxRuntime YoloV5 Demo

目录 效果 模型信息 项目 代码 Form1.cs YoloV5.cs 下载 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name&#xff1a;images tensor&#xff1a…

机器学习/人工智能中的学习证明

一、说明 在进行任何数学发展之前&#xff0c;我们必须首先了解学习的基础以及它如何与错误的概念密切相关。关于代价函数&#xff0c;它的工作原理是梯度下降原理。本文将回顾梯度下降原理。 二、假想的厨师 想象一下&#xff0c;在任何一天&#xff0c;你决定复制你在一家著名…

8.13 Day19 Windows服务器(Windows service 2008 R2)上域的搭建 (1)

域服务器&#xff08;DC&#xff09;&#xff1a;安装了活动目录服务的服务器就称为DC。 将三台设备配置在同一网络中&#xff0c;此处将外部网络隔离开&#xff0c;只将他们放在局域网中 服务端网络配置&#xff0c;此时与外部网络彻底隔绝开&#xff0c;且已无法和主机通信&…

XSS game复现(DOM型)

目录 1.Ma Spaghet! 2.Jefff 3.Ugandan Knuckles 4.Ricardo Milos 5.Ah Thats Hawt 6.Ligma 7.Mafia 8.Ok, Boomer 1.Ma Spaghet! 通过简单的尝试发现传递参数可以直接进入h2标签 接下来我们尝试传入一个alert(1) 可以看到并没有触发。原因是在innerHTML中官方禁用了sc…

二进制安装php

下载php二进制包&#xff1a; 官网地址&#xff1a;https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载&#xff1b; 下载完成后进行解压&#xff1a; tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…

xss案例

首先进入XSS Game - Learning XSS Made Simple! | Created by PwnFunction打开环境 Ma Spaghet 在script里面给使用get传参给somdbody传一个值&#xff0c;若没有传值&#xff0c;默认传SomebodyToucha Ma Spaghet!,赋值给spaghet,放在h2标签中&#xff0c;spaghet后会有一个in…

Linux根目录下的各个目录的用途介绍

在Linux系统中&#xff0c;我们可以通过cd /命令进入根目录&#xff0c;然后ls -l(或者ll命令)即可查看根下目前的目录情况&#xff1a; 这些不同目录的用途说明如下&#xff1a; /bin&#xff1a;包含基本命令文件&#xff0c;如ls、cp等&#xff0c;这个文件中的文件都是可执…

基于协同过滤算法的黔醉酒业白酒销售系统_p091v--论文

TOC springboot349基于协同过滤算法的黔醉酒业白酒销售系统_p091v--论文 绪论 1.1背景及意义 中国经济快速发展&#xff0c;人均GDP逐年上涨&#xff0c;非生活必须品的消费比重也随之增加 &#xff0c;酒类销售额度&#xff0c;尤其是酱香型白酒销售额近些年可谓发展迅猛&…

STM32通过I2C硬件读写MPU6050

目录 STM32通过I2C硬件读写MPU6050 1. STM32的I2C外设简介 2. STM32的I2C基本框图 3. STIM32硬件I2C主机发送流程 10位地址与7位地址的区别 7位主机发送的时序流程 7位主机接收的时序流程 4. STM32硬件与软件的波形对比 5. STM32配置硬件I2C外设流程 6. STM32的I2C.h…

Hadoop如何搭建计算和存储节点分离

在业内存在着一种看起来比较离谱的搭建方式&#xff0c;叫计算节点与存储节点分离&#xff0c;说它比较离谱&#xff0c;是因为hadoop架构本身不直接支持将这两者分开&#xff0c;因为hadoop本身的一大优势就是计算本地化&#xff0c;这种分开搭建的方式抛弃了这种优势&#xf…