[转帖]Kafka之ack机制
前言
之前的博客里说了,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的最坏情况出现导致的丢消息。
[转帖]Kafka之ack机制的更多相关文章
- kafkaspot在ack机制下如何保证内存不溢
新浪微博:intsmaze刘洋洋哥. storm框架中的kafkaspout类实现的是BaseRichSpout,它里面已经重写了fail和ack方法,所以我们的bolt必须实现ack机制,就可以 ...
- Storm的ack机制在项目应用中的坑
正在学习storm的大兄弟们,我又来传道授业解惑了,是不是觉得自己会用ack了.好吧,那就让我开始啪啪打你们脸吧. 先说一下ACK机制: 为了保证数据能正确的被处理, 对于spout产生的每一个tup ...
- kafka的HA机制
1.kafka的HA机制:副本机制+消息同步+leader选举. 每个topic有多个partition,每个partition又有多个副本,这些副本当中也存在不同的角色,leader.followe ...
- kafka的ACK
在谈及到Kafka的ACK之前我们要向讲一下Kafka的复制机制,为了保证Kafka的高性能,设计了分区,一个topic的分区是的数据可以分散,然后可以让更多的消费者来进行消费:避免单一分区,只能由一 ...
- Storm的BaseBasicBolt源码解析ack机制
我们在学习ack机制的时候,我们知道Storm的Bolt有BaseBasicBolt和BaseRichBolt.在BaseBasicBolt中,BasicOutputCollector在emit数据的 ...
- Storm可靠性实例解析——ack机制
对于Storm,它有一个很重要的特性:“Guarantee no data loss” ——可靠性 很显然,要做到这个特性,必须要track每个data的去向和结果.Storm是如何做到的呢——ack ...
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了, ...
- ActiveMQ讯息传送机制以及ACK机制
http://blog.csdn.net/lulongzhou_llz/article/details/42270113 ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息 ...
- kafka知识体系-kafka设计和原理分析-kafka文件存储机制
kafka文件存储机制 topic中partition存储分布 假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中 ...
- TCP的延迟ACK机制
TCP的延迟ACK机制 TCP的延迟ACK机制一说到TCP,人们就喜欢开始扯三步握手之类的,那只是其中的一个环节而已.实际上每一个数据包的正确发送都是一个类似握手的过程,可以简单的把它视为两步握手.一 ...
随机推荐
- CUDA个人入坟笔记
CUDA是建立在NVIDIA的GPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题.近年来,GPU最成功的一个应用就是深度学习领 ...
- linux中mysql下载安装部署
创建mysql文件 mkdir mysql 首先通过yum下载wget命令 yum -y install wget 在mysql文件中通过wget下载MySQL存储库 wget https://dev ...
- 使用 Python 将数据写入 Excel 工作表
在数据处理和报告生成等工作中,Excel 表格是一种常见且广泛使用的工具.然而,手动将大量数据输入到 Excel 表格中既费时又容易出错.为了提高效率并减少错误,使用 Python 编程语言来自动化数 ...
- 基于Fabric的性能测试与调优实践
摘要:本文聚焦Fabric核心业务,构建一个测试模型,对社区原生的Fabric和华为云区块链(基于Fabric)进行实测,识别社区原生Fabric的性能瓶颈,并尝试通过华为区块链提供的动态伸缩.快速P ...
- 低门槛上手快!火山引擎 VeDI 这样满足数据分析新需求
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,市场研究机构 IDC 发布<2022 年 V2 全球大数据支出指南>. 数据显示,2021 ...
- 日常问题杂记-updating
python3新式类的解析顺序-C3算法由来 - mro-resolution-order canvas文本绘制 - 参考链接 高性能渲染大批量数据 - 参考链接 virtualized list - ...
- Java FTP操作
pom引用: <dependency> <groupId>commons-net</groupId> <artifactId>commons-net&l ...
- 厄拉多塞筛法的 Python 实现以及复杂度计算
想要得到一个不大于N的数所有素数,可以先找到不超过根号N的所有素数,设2 = p1 < p2 < ......<pk ≤√N,然后在2,3,4......N里面进行下面的操作: 留下 ...
- Python的excel文件读写(未完)
写在前面: 因为每次用到都要查感觉太烦了,所以干脆写了一篇博客总结( •̥́ ˍ •̀ू ) 一.xlwt写入excel文件(.xls) import xlwt data1=[[1,2,3,4],[5 ...
- 元素可视区client系列
client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息. 通过client系列的相关属性可以动态的得到该元素的边框大小.元素大小等. client系列属性 作用 ...