Kafka的数据消费过程以及消息不丢失机制

2023-11-13

Kafka数据写入流程

执行流程:

  1. 生产者获取对应分区的 leader 位置
  2. 发数据给leader
  3. broker进程上的leader将消息写入到本地log中
  4. 其他的follower从leader上拉取消息,写入到本地log,并向leader发送ACK
  5. leader接收到所有的ISR中的Replica的ACK后,并向生产者返回ACK表示成功。
    在这里插入图片描述

Kafka数据消费流程

在所有消费队列当中,在消费数据的流程分为两种:推模式(push)、拉模式(pull)

  • 推模式(push):消息队列记录所有的消费的状态,某一条消息如果被标记为已消费,则消费者是不能再对它进行消费的
  • 拉模式(pull):就是消费者自己记录消费状态,每个消费者互相独立地顺序拉取数据
  • kafka 采用的拉取模型,由消费者自己记录消费状态,每个消费者互相独立地顺序拉取每个分区的消息。
  • 消费者可以按照任意的顺序消费消息。
    比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。

执行流程:

  1. 消费者从 ZK 当中获取到 partition 以及 consumer 对应的 offset (默认从ZK中获取上一次消费的offset)
  2. 找到该分区的leader,拉取数据
  3. leader从本地log(日志)当中读取数据,最终返回给消费者
  4. 最终拉取完数据,提交offset给ZK

在这里插入图片描述

消息不丢失机制

broker数据不丢失

生产者通过分区的 leader 写入数据后,所有在 ISR 中 follower 都会从 leader 中复制数据,这样,可以确保即使 leader 崩溃了,其他的follower的数据仍然是可用的。

生产者数据不丢失

  • 生产者连接leader写入数据时,可以通过ACK机制来确保数据已经成功写入。ACK机制有三个可选配置。
    • 配置ACK响应要求为 -1/all 时 —— 表示所有的节点都收到数据(leader和follower)都接收到数据。
    • 配置ACK响应要求为 1 时 —— 表示leader收到数据(默认配置)
    • 3.配置ACK影响要求为 0 时 —— 生产者只负责发送数据,不关心数据是否丢失(这种情况可能会产生数据丢失,但性能是最好的)
  • 生产者可以采用同步异步两种方式发送数据
    • 同步:发送一批数据给kafka后,等待kafka返回结果后再执行下一个语句。
    • 异步:发送一批数据给kafka,只是提供一个回调函数。

说明:如果 broker 迟迟不给 ack,而 buffer 又满了,开发者可以设置是否直接清空 buffer 中的数据

消费者数据不丢失

在消费者消费数据的时候,只要每个消费者记录好offset值即可,就能保证数据不丢失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kafka的数据消费过程以及消息不丢失机制 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 练习:“快乐数”判断

    练习 快乐数 判断 APP发文编辑机制更新后 慢热的我还适应不来 这里只放了 python 代码 运行效果和题目 请点击前面蓝色文字 移步我昨天的 学习打卡 帖 Pyonth 代码 coding utf 8 from random impo
  • 冒泡排序详解(C语言)

    对于刚入门学习编程的新手来说 冒泡排序应该是大家接触的第一个算法 由于刚接触编程不久 新手的思维还没有得到很好的开拓 冒泡排序在一开始对新手来说有些难理解 现在就让我们来看看新手如何更好的来理解冒泡排序算法 冒泡排序的思路 假设数组有n个数
  • Attentional Feature Fusion 注意力特征融合

    Attentional Feature Fusion 注意力特征融合 最近看到一篇比较不错的特征融合方法 基于注意力机制的 AAF 与此前的 SENet SKNet 等很相似 但 AFF 性能优于它们 并且适用于更广泛的场景 包括短和长跳连
  • Web3存储赛道Arweave(AR)

    Arweave简介 Arweave的愿景是成为一座新的亚历山大图书馆 旨在成为世界知识的普遍宝库 Arweave是一个类似FileCoin的新的去中心化存储平台 Arweave通过区块链的方式实现 文件存在每一个区块上 Arweave原来的
  • Matlab学习11-图像处理之图像变换

    文章目录 一 傅里叶变换快速卷积 二 模板匹配 三 二维离散余弦变换 四 JPEG图像压缩典型算法 总结 一 傅里叶变换快速卷积 代码 傅里叶变换快速卷积 disp 步骤1 生成3 3的矩阵A和B A 4 5 6 7 8 9 B 3 2 1
  • 看到一篇关于软件专业的讨论,对将要选大学专业的人很有用

    APUE和UNP看不懂怎么办 狗尾草 C 前几天京东搞活动 我就把这三本书都买了 结果还是高估了自己的功力 看了一星期都看不懂 谁能提点建议 这两套书该怎么看或者推荐一点更简单入门的书 mephistohk W Richard Steven
  • Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\calibration.py

    coding utf 8 This file is part of the Horus Project author Jes煤s Arroyo Torrens
  • java定时器,每天00:00执行任务

    import java text SimpleDateFormat import java util Calendar import java util Timer import java util TimerTask public cla
  • 多分类 & 多标签 准确度计算

    多标签 V S 多分类 多类分类 Multiclass classification 表示分类任务中有多个类别 比如对一堆水果图片分类 它们可能是橘子 苹果 梨等 多类分类是假设每个样本都被设置了一个且仅有一个标签 一个水果可以是苹果或者梨
  • ubuntu16.04-cuda11.1上使用TensorRT加速yolov5推理

    基础 环境 其实极客的版本已经给我们了 ubuntu16 04 cuda11 1 cudnn8 0 opencv4 1 1 tensorrt7 2 检查 ubantu版本 lsb release a 检查cuda版本 nvcc versio
  • weex 一个传说级巨坑-- 2018最新版weex踩坑指南(weex navigator 多界面跳转)

    先说结论 本人极度非常 不推荐weex作为任何商用开发 有很多人会说了 你瞎扯 你看别人阿里 啊飞猪 啊那个支付宝 人家不是用得好好的么 当然这也是我们公司作为技术选型的考量 三端通用 阿里系的app全线在用 理论上是可以实现的 而且我们在
  • find / -name file 权限不足

    find name file 权限不足 1描述如下 原因 解决方案 结果 在查找系统文件中 查找到 roor user 1000 gvfs目录时提示权限不够 1描述如下 find name test01 txt home kali test
  • 总结12个python代码

    python有很好的可读性和简洁性 学会其中的小的技巧 运用的恰当 会让我们的工作事半功倍 以下是我总结的12个小的程序段 看似非常的简单 但是却非常的有技巧性 并且对个人的编程能力是一个很好的检验 大家应该在日常的编程中多多使用 多多练习
  • 【精华】安卓开发学习路线规划

    近一段时间经常被朋友问到如何从零开始学习安卓 成为一名安卓开发工程师 不得不感叹 现在各行各业都有不少人在涌向IT 互联网行业 希望从事程序开发工作 竞争越来越激烈了 借此机会 我梳理了一下自己所学所知的安卓知识 制定了这份安卓开发学习路线
  • c语言中swap表示什么意思,swap是什么意思_单片机里的SWAP A是什么意思啊?

    Swap是什么意思 Swap是一种金融衍生品 指交易双方约定在未来某一期限相互交换各自持有的资产或现金流的交易形式 外汇里的 swap 是什么意思 外汇里swap专业说法是掉期 通俗的说法就是隔夜利息 指的是你炒外汇使用的杠杆部分的资金你应
  • leetCode Q3:Longest Substring Without Repeating Characters(java)

    1 题目链接 https leetcode com problems longest substring without repeating characters description 2 题目内容 中文版 给一个字符串 要求返回最长的不
  • 详解用户画像

    01画像简介 用户画像 即用户信息标签化 通过收集用户的社会属性 消费习惯 偏好特征等各个维度的数据 进而对用户或者产品特征属性进行刻画 并对这些特征进行分析 统计 挖掘潜在价值信息 从而抽象出用户的信息全貌 如图1 1所示 用户画像可看作
  • 史上最全C/C++面试八股文,一文带你彻底搞懂C/C++面试!

    前述 本文初衷是为了总结本人在各大平台看到的面经 我会在本文持续更新我所遇到的一些C 面试问题 如有错误请一定指正我 目录 1 讲一讲封装 继承 多态是什么 2 多态的实现原理 实现方式 是什么 以及多态的优点 特点 3 final关键字的
  • PHP实现微信公众号主动推送消息

    这篇文章主要介绍了php实现微信公众号主动推送消息的方法 PHP版微信公共平台消息主动推送 突破订阅号一天只能发送一条信息限制 需要的朋友可以参考下 通过学习借鉴朋友的实现方法进行整理 实现了PHP版的微信公共平台消息主动推送 分享给大家供
  • Kafka的数据消费过程以及消息不丢失机制

    文章目录 Kafka数据写入流程 Kafka数据消费流程 消息不丢失机制 broker数据不丢失 生产者数据不丢失 消费者数据不丢失 Kafka数据写入流程 执行流程 生产者获取对应分区的 leader 位置 发数据给leader brok