Kafka的消费消息是如何传递的?

大家好,我是锋哥。今天分享关于【Kafka的消费消息是如何传递的?】面试题。希望对大家有帮助;

Kafka的消费消息是如何传递的?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

Kafka 的消息传递是通过 消费者(Consumer)消费者组(Consumer Group) 来进行管理的。Kafka 设计了一个高效的消息传递机制,支持高吞吐量、容错和分布式架构,下面是 Kafka 消息消费的基本过程:

1. 主题(Topic)和分区(Partition)

Kafka 将消息分为不同的主题(Topic),每个主题可以有多个分区(Partition)。这些分区在 Kafka 集群中分布,可以跨多个机器进行分布式存储和处理。

  • 分区:每个分区中的消息是有序的。Kafka 为了实现扩展性,将一个大的 Topic 切割成多个分区。每个消息在分区内都有一个唯一的 offset,即在该分区中的位置。
  • 消息顺序:消息在一个分区内是有序的,但不同分区之间的顺序是无法保证的。

2. 消费者(Consumer)

消费者从 Kafka 集群中拉取消息。每个消费者通过订阅特定的 Topic 或分区来获取消息。消费者按顺序消费消息,并通过 offset 记录消费的进度。

消费者的工作原理:
  • 消费者从 Kafka 的某个分区中读取消息,并根据 offset 跟踪已消费的消息位置。
  • 每个消费者都能独立地选择开始消费的 offset,这意味着消费者可以从任何消息开始消费,而不仅仅是从最新的消息。

3. 消费者组(Consumer Group)

Kafka 引入了 消费者组 的概念,以实现负载均衡和容错性。消费者组将多个消费者组织成一个组,每个消费者只消费分配给它的分区中的消息,避免了同一个分区的消息被多个消费者重复消费。

消费者组的工作原理:
  • 负载均衡:在一个消费者组内,Kafka 会将 Topic 的多个分区分配给消费者。每个消费者最多只能消费一个分区(可以没有分配到分区),而同一个分区只能由同一个消费者消费。消费者组内的消费者数量和分区数量应该相对匹配,避免资源浪费。
  • 消息的分配:Kafka 会根据消费者组内的消费者数量动态地调整消息的分配。如果消费者增加,Kafka 会重新平衡分区的分配。反之,如果消费者减少,Kafka 会将该消费者原先负责的分区重新分配给其他消费者。
消费者组的优势:
  • 高可用性:当一个消费者宕机时,其他消费者会重新接管该消费者负责的分区,保证了消息的消费不受影响。
  • 扩展性:通过增加消费者,Kafka 可以横向扩展消费能力。

4. 偏移量管理(Offset Management)

Kafka 会记录每个消费者的消息消费进度,即偏移量(offset)。偏移量是在分区内唯一的标识符,表示该消费者已经消费到的位置。

  • 自动提交:Kafka 允许消费者自动提交偏移量,消费者每次拉取消息后会自动提交当前消息的偏移量。
  • 手动提交:消费者也可以选择手动提交偏移量,确保消息消费的精确控制,适用于需要确保消息可靠处理的场景。

偏移量存储的位置:

  • Kafka 内部的偏移量存储:消费者组的偏移量可以存储在 Kafka 的 __consumer_offsets 内部主题中。每个消费者组都有一个偏移量记录,以便在消费者重启或重新加入时恢复消费进度。
  • 外部存储:如果有特别的需求,也可以将偏移量存储在外部数据库中,例如 Zookeeper 或数据库,Kafka 本身并不强制要求偏移量的存储方式。

5. 消费者拉取消息

消费者通过拉取(pull)方式获取消息。消费者会向 Kafka 集群的某个分区请求消息,可以指定从哪个 offset 开始读取。

  • 拉取请求:消费者向 Kafka 发送拉取请求,指定要从哪个分区的哪个 offset 开始拉取。
  • 返回消息:Kafka 响应消费者请求,返回消息及其对应的 offset

6. 消息的确认与重试

在 Kafka 中,消息消费的确认方式(即偏移量的提交)决定了消息是否被认为已成功消费。消费者在接收到消息并处理后,会将偏移量提交给 Kafka。

  • 自动提交偏移量:如果消费者设置为自动提交模式,它会在每次拉取消息后自动提交当前消息的偏移量。这样,即使消费者宕机,Kafka 也能知道最后一个成功消费的消息。
  • 手动提交偏移量:如果消费者选择手动提交偏移量,它可以在确保消息处理成功后,显式提交偏移量。如果在消费过程中发生失败,消费者可以选择不提交偏移量或回滚到之前的偏移量重新消费。

7. 消息的消费保证

Kafka 支持三种消费保证:

  • At most once:每条消息最多消费一次,如果消费者未成功处理,消息不会被重新消费。
  • At least once:每条消息至少被消费一次,确保不会丢失消息,但可能会重复消费消息。
  • Exactly once:每条消息只会被消费一次,保证消息处理的准确性。

通常,Kafka 会在消费者的处理逻辑中结合消费者的业务需求来保证消息的准确性和重复消费的容忍度。

8. 流量控制和背压

Kafka 提供了流量控制机制,消费者通过调整拉取消息的速率来避免处理过多的消息。如果消费者处理不过来,Kafka 会阻止过多消息的传输,从而实现背压。

总结

Kafka 的消息消费是通过 消费者组分区 机制进行的。每个消费者只消费某个分区内的消息,并根据偏移量跟踪进度。消费者组能够实现负载均衡,保证消息的高效消费和容错性。消息的消费保证模式(如 at most onceat least onceexactly once)确保了不同业务场景下的不同需求。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑:在Windows系统写了一个脚本,比如上面,随后上传到服务,执行会报错 原因: 解决方案:在linux系统touch文件,并通过vim添加内容&…

Android 使用 Canvas 和 Paint 实现圆形图片

学习笔记 效果展示: 全部代码: public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过 DataBinding 获取布局文件binding …

敖汉宝塔油页岩露天矿山安全自动化监测

1. 项目简介 本次项目位于内蒙古自治区赤峰市敖汉旗宝国吐乡大青山村,地理位置好。主营许可经营项目:无一般经营项目:页岩油生产;页岩油、润滑油、建筑材料(不含油漆)销售等单位规模1-20人,单位…

fedora下Jetbrains系列IDE窗口中文乱码解决方法

可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:

LeetCode题练习与总结:删除二叉搜索树中的节点--450

一、题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤&am…

Python_Flask03

这篇文章主要介绍的是数据库的增删改查操作,无多余好说的。 from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import text from flask_migrate import Migrateapp Flask(__name__)# 本地基础信息的主机名 HOSTNAME "127.0…

我国基本比例尺地形图介绍

目录 1.前言2.大中小比例尺划分3.使用的投影4.使用3度带6度带?5.详细介绍1:100万地形图1:50万地形图1:25万地形图1:10万地形图1:5万地形图1:2.5万地形图1:1万地形图1:5000地形图 6.总结 1.前言 本文搜集整理了我国国家基本比例尺地形图的情况,共11种&…

离线安装ollama到服务器

搜了很多教程不满意,弄了半天才弄好,这里记录下,方便以后的人用,那个在线下载太慢,怕不是得下载到明年。 一.从官网下在liunx版的tgz安装包 Releases ollama/ollama (github.com) 查看自己的服务器信息(参考 https:/…

Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!

今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR,可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像(第一行)和二维码图像(第二行)。生成的二维码不仅忠实地保留…

WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路

2024年11月30日下午,由 deepin(深度)社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG(武汉Linux用户组)线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…

排查bug的通用思路

⭐️前言⭐️ APP点击某个按钮没有反应/PC端执行某个操作后,响应较慢,通用的问题排查方法: 从多个角度来排查问题 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评…

Uniapp的App环境下使用Map获取缩放比例

概述 目前我试过的就是你用vue后缀是拿不到比例的你可以用nvue当然uniapp的uvue应该是更加可以的我使用的是高德所以你得在高德的后台声请原生的Android的key才可以如果是vue3的开发模式的话不用使用this来获取当前对象使用scale对象来接受和改变缩放比例会比较友好然后直接走…

如何利用Java爬虫获得商品类目

在当今数字化时代,数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言,获取商品类目数据尤为重要,因为这些数据可以帮助他们更好地理解市场…

筑起厂区安全--叉车安全防护装置全解析

在繁忙的工业生产领域中,叉车作为搬运工,穿梭于仓储与生产线之间。然而,叉车的高效运作背后,也隐藏着诸多安全风险,尤其是在那些空间狭小、物流繁忙的环境中。为了降低这些潜在的危险,叉车安全防护装置便成…

AI新动向:豆包文生图升级,文心一言领先市场

在今日的AI资讯中,我们关注到了几个重要的行业动态,其中包括字节跳动AI助手豆包的功能升级,以及百度文心一言在生成式AI市场的领先地位。 字节跳动旗下的智能AI助手豆包近期对其文生图能力进行了显著提升,用户现在可以通过一键操…

【深度学习】手机SIM卡托缺陷检测【附链接】

一、手机SIM卡托用途 SIM卡托是用于固定和保护SIM卡的部件,通过连接SIM卡与手机主板的方式,允许设备访问移动网络,用户可以通过SIM卡进行通话、发送短信和使用数据服务。 二、手机SIM卡托不良影响 SIM卡接触不良,造成信号中断&…

PDF文件打开之后不能打印,怎么解决?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

JUC:读写锁和邮戳锁

1. 面试题 你知道Java里面有那些锁你说说你用过的锁,锁饥饿问题是什么?有没有比读写锁更快的锁StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制,你知道吗? 2. 读写锁&a…

「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果

本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。 关键词 UI互动应用闪烁动画动态按钮状态管理用户交互 一、功能说明 闪烁按钮效果应用实现了一个动态交互功能&#xf…

MongoDB的简单使用

MongoDB(文档数据库)的简单使用 MongoDB最好的学习资料就是他的官方文档:SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0 1.MongoDB CRUD操作 1.1Insert操作 基本方法: db.collection.insertOne() 将单个文档(document)插入集合中 db.collectio…