前言

之前的博客里说了,Kafka的消息同步是一种ISR机制,本质上是“完全同步”的一种优化。

都在说,消息被ISR中所有副本都写入才算写入成功。但是这样未免定的太死板了,所以,Kafka给出了我们选择。

这个选择就是ack机制

生产者参数

request.required.acks 是producer可以指定的参数

ack = 1 (默认)

leader写入成功,producer就能收到成功响应(这和同步不同步没关系,你就当只有leader,没有follower就行)

ack = 0

producer只管发,不等待服务器响应,爱成功不成功。(吞吐量最高)

ack = -1 / ack = all

producer 需要等待 ISR 中的所有replica都成功写入,才能够收到来自服务端的成功响应。

这才是ISR的正确应用场景,可靠性最高

ISR的最坏情况

排除所有replica全部故障,ISR的最坏情况就是ISR中只剩leader自己一个了。

退化成 ack = 1的情况了,甚至还不如ack=1。

ack=1,说的是producer不等服务端完全同步完ISR,只要leader写入成功就行了,但是可没说不进行同步了。

该有的同步过程还是会进行的,但凡能同步,Kafka肯定会同步的,而ack=1的最坏情况,也是ISR中只剩下leader了。

换句话说,producer为了提高吞吐量,没等ISR全部同步,但是心里还是希望进口同步完成的。

而这种leader孤家寡人的最坏情况,书上说“退化成ack=1",笔者认为不足以说明问题的严重性。

ISR的最坏情况,会使ack=-1 退化成 ack=1时的最坏情况,完全背离我们设置-1的初衷(因为铁定是同步不了了)。

与其他参数的配合使用

min.insync.replicas = n(broker的配置)

如果生产者acks=all,而在发送消息时,ISR中的replica数量没有达到n,Broker不能处理这条消息,需要直接给生产者报错。

所以只要 min.insync.replicas >= 2,就能避免由ISR的最坏情况出现导致的丢消息。

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览13727 人正在系统学习中

[转帖]Kafka之ack机制的更多相关文章

  1. kafkaspot在ack机制下如何保证内存不溢

    新浪微博:intsmaze刘洋洋哥.   storm框架中的kafkaspout类实现的是BaseRichSpout,它里面已经重写了fail和ack方法,所以我们的bolt必须实现ack机制,就可以 ...

  2. Storm的ack机制在项目应用中的坑

    正在学习storm的大兄弟们,我又来传道授业解惑了,是不是觉得自己会用ack了.好吧,那就让我开始啪啪打你们脸吧. 先说一下ACK机制: 为了保证数据能正确的被处理, 对于spout产生的每一个tup ...

  3. kafka的HA机制

    1.kafka的HA机制:副本机制+消息同步+leader选举. 每个topic有多个partition,每个partition又有多个副本,这些副本当中也存在不同的角色,leader.followe ...

  4. kafka的ACK

    在谈及到Kafka的ACK之前我们要向讲一下Kafka的复制机制,为了保证Kafka的高性能,设计了分区,一个topic的分区是的数据可以分散,然后可以让更多的消费者来进行消费:避免单一分区,只能由一 ...

  5. Storm的BaseBasicBolt源码解析ack机制

    我们在学习ack机制的时候,我们知道Storm的Bolt有BaseBasicBolt和BaseRichBolt.在BaseBasicBolt中,BasicOutputCollector在emit数据的 ...

  6. Storm可靠性实例解析——ack机制

    对于Storm,它有一个很重要的特性:“Guarantee no data loss” ——可靠性 很显然,要做到这个特性,必须要track每个data的去向和结果.Storm是如何做到的呢——ack ...

  7. 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)

    使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...

  8. ActiveMQ讯息传送机制以及ACK机制

    http://blog.csdn.net/lulongzhou_llz/article/details/42270113 ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息 ...

  9. kafka知识体系-kafka设计和原理分析-kafka文件存储机制

    kafka文件存储机制 topic中partition存储分布 假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中 ...

  10. TCP的延迟ACK机制

    TCP的延迟ACK机制 TCP的延迟ACK机制一说到TCP,人们就喜欢开始扯三步握手之类的,那只是其中的一个环节而已.实际上每一个数据包的正确发送都是一个类似握手的过程,可以简单的把它视为两步握手.一 ...

随机推荐

  1. Windows环境下为Android编译OpenCV4.3

    Windows环境下为Android编译OpenCV4.3 踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会 ...

  2. SQLite3使用笔记(2)——插入

    目录 1. 论述 2. 总结 1. 论述 如同上一篇文章SQLite3使用笔记(1)--查询所述,使用SQLite进行查询操作同样有两种方式.对于比较简单的表格插入,使用sqlite3_exec()接 ...

  3. 带你认识多模数据库GeminiDB架构与应用实践

    本文分享自华为云社区<多模归一,一生万物--华为云多模数据库GeminiDB架构与应用实践>,作者: GaussDB 数据库 . 在这个信息爆炸的时代,数据的管理和应用变得越来越重要.互联 ...

  4. 3步带你搞定华为云编译构建CodeArts Build “新手村任务”

    华为云编译构建(CodeArts Build)基于云端大规模并发加速,为客户提供高速.低成本.配置简单的混合语言构建能力,帮助客户缩短构建时间,提升构建效率. 本文将给各位开发者带来华为云CodeAr ...

  5. KubeEdge在国家工业互联网大数据中心的架构设计与应用

    摘要:在18年的时候,工信部开展了一个叫国家创新发展工程,这个工程中提出了要建立一个国家工业大数据中心,中国移动在其中承担了边缘协同与数据采集相关功能的研发.本文将从该项目背景下面临的问题与挑战.技术 ...

  6. 多语言ASR?没有什么听不懂,15种语言我全都要

    摘要:在这篇博文中,我们介绍来自Google的一篇论文<Scaling End-to-End Models for Large-Scale Multilingual ASR>,来看看如何构 ...

  7. 使用 Python Poetry 进行依赖管理

    摘要:在本教程中,您探索了如何创建新的 Python Poetry 项目以及如何将 Poetry 添加到现有项目中. 本文分享自华为云社区<使用 Python Poetry 进行依赖管理> ...

  8. 多领域应用落地,火山引擎ByteHouse加速云数仓升级

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近日,火山引擎数智平台VeDI直播活动「超话数据」在线举办,来自火山引擎的产品及解决方案专家分享了以ByteH ...

  9. DataLeap的全链路智能监控报警实践(二):概念介绍

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警.何时报警.如何报警以及 ...

  10. Chrome 护眼模式 - 黑暗模式 - 夜眼(Night Eye) 插件

    Chrome 地址栏里输入: chrome://extensions/ 打开插件商城: