[转帖]Kafka之ack机制

kafka,ack,机制 · 浏览次数 : 0

小编点评

**前言** Kafka的消息同步是一种ISR机制,本质上是“完全同步”的一种优化。然而,此方法存在一些问题,因此Kafka给出了我们选择ack机制,用于指定producer可以指定的参数 ack。 **ack机制** ack机制可以设置不同的参数来控制producer发送消息的机制。以下是一些常用的参数: * **ack=1:** 生产者会等待服务端完全同步完ISR才接收成功响应。 * **ack=0 : 生产者只管发,不等待服务器响应,爱成功不成功。 * **ack=-1 / ack = all:** 生产者需要等待ISR 中所有replica都成功写入才能够接收来自服务端的成功响应。 **最坏情况** ack=-1 的参数用于指定producer为了提高吞吐量,没等ISR全部同步,但是心里还是希望进口同步完成的。在这种情况下,如果ISR中只剩leader自己一个了,producer也会退化成ack=1,甚至还不如ack=1。 **结论** Kafka的消息同步是一种可靠性非常高的机制,但最坏情况下,如果服务端完全同步完成,producer也会退化成ack=1,甚至不如ack=1。因此,建议设置min.insync.replicas参数来避免这种问题。

正文

前言

之前的博客里说了,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机制相似的内容:

[转帖]Kafka之ack机制

前言 之前的博客里说了,Kafka的消息同步是一种ISR机制,本质上是“完全同步”的一种优化。 都在说,消息被ISR中所有副本都写入才算写入成功。但是这样未免定的太死板了,所以,Kafka给出了我们选择。 这个选择就是ack机制 生产者参数 request.required.acks 是produc

[转帖]Kafka之ISR机制的理解

Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失。 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同步,才发送ack。但是又有所区别。 所以,你们才会在各种博客看到这句话【kafka不是完全同步,也不

[转帖]Kafka可靠性之HW与Leader Epoch

《深入理解Kafka:核心设计与实现原理》是基于2.0.0版本的书 在这本书中,终于看懂了笔者之前提过的几个问题 准备知识 1、leader里存着4个数据:leader_LEO、leader_HW、remote_LEO集合、remote_HW集合 2、follower里只保存自身的:follower

[转帖]Kafka故障之磁盘打满

https://www.jianshu.com/p/095e820361ae 问:磁盘打满扩容后能正常重启吗?答:不一定 要看文件格式是否损坏(log、index等)。如果损坏会报错:index file due to requirement failed: Corrupt index found,

[转帖]Kafka常见使用场景与Kafka高性能之道

https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。 消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

[转帖]【Kafka】Kafka配置参数详解

Kafka配置参数详解 Kafka得安装与基本命令Kafka配置参数kafka生产者配置参数kafka消费者配置参数 本篇文章只是做一个转载的作用以方便自己的阅读,文章主要转载于: Kafka核心配置参数与机制一文 版权声明:本文为CSDN博主「张行之」的原创文章,遵循CC 4.0 BY-SA版权协

[转帖]java性能分析之火焰图

http://t.zoukankan.com/lemon-le-p-13820204.html 原由 最近因为kafka、zookeeper、ES和相关的Java应用的内存问题搞的头大,做运维将近4年,对Java调优、性能方面的知识了解的少之又少,是时候下定决心来对他多一个学习了。不能一口吃成一个胖

[转帖]sendfile“零拷贝”、mmap内存映射、DMA

https://www.jianshu.com/p/7863667d5fa7 KAFKA推送消息用到了sendfile,落盘技术用到了mmap,DMA贯穿其中。 先说说零拷贝 零拷贝并不是不需要拷贝,而是减少不必要的拷贝次数。通常是说在IO读写过程中。 实际上,零拷贝是有广义和狭义之分,目前我们通常

[转帖]Kafka 基本概念大全

https://my.oschina.net/jiagoushi/blog/5600943 下面给出 Kafka 一些重要概念,让大家对 Kafka 有个整体的认识和感知,后面还会详细的解析每一个概念的作用以及更深入的原理 ・Producer:消息生产者,向 Kafka Broker 发消息的客户端

[转帖]Kafka 与RocketMQ 落盘机制比较

https://www.jianshu.com/p/fd50befccfdd 引言 前几期的评测中,我们对比了Kafka和RocketMQ的吞吐量和稳定性,本期我们要引入一个新的评测标准——软件可靠性。 何为“可靠性”? 先看下面这种情况:有A,B两辆越野汽车,在城市的周边地区均能很好应对泥泞的路况