码迷,mamicode.com
首页 > 其他好文 > 详细

kafka零数据丢失的配置方案

时间:2020-06-14 18:20:10      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:art   有一个   响应   哪些   方案   处理   配置   ica   拉取   

讨论一下kafka参数的配置

1、acks 参数配置

acks这个参数有三个值:0,1,-1,但是不用的参数对应的含义不同,那如果我们想要保证数据不丢失,acks 值应该设置为哪个参数呢?

0:代表生产者只要把消息发送出去以后就认为消息发送成功了,这种方式有可能会导致数据丢失,因为有可能消息发送到服务端以后服务端存储失败了。

1:代表生产者把消息发送到服务端,服务端的 leader replica 副本写成功以后,就返回生产者消息发送成功了,这种方式也有可能导致丢数据,因为有可能刚好

数据写入到leader replica,然后返回处理成功的响应给生产者,假如这个时候leader replica 在的服务器出问题了,follower replica 还没来得及同步数据,这个时候是会

丢失数据的。

-1(all):代表生产者把消息发送到服务端,服务端的ISR列表里所有的 replica都写入成功以后,才会返回成功响应给生产者。

假设ISR列表里面有该分区的三个replica(一个leader replica,两个follower replica ),那么acks=-1 就意味着消息要写入到 leader replica,并且两个 follower replica从

leader replica 上同步数据成功,服务端才会给生产者发送消息 发送成功的响应。

所以ISR列表里面的replica 就非常关键。如果我们想要保证数据不丢,那么acks的值设置为-1,并且还需要保证ISR列表里面是1个副本以上。

所以 acks的值要设置为-1。

 

2、ISR到底指的是什么东西?

既然大家已经知道了Partition的多副本同步数据的机制了,那么就可以来看看ISR是什么了。

ISR全称是 "In-Sync Replicas",也就是保持同步的副本,它的含义就是,跟leader 始终保持同步的 follower有哪些。

大家可以想一下,如果说某个follower所在的broker因为JVM Full GC之类的问题,导致自己卡顿了,无法及时从Leader拉取同步数据,那么是不是会导致Follower

数据被Leader要落后很多?

所以这个时候,就意味着follower已经跟leader不再处于同步的关系了。但是只要follower一直及时从leader同步数据,就可以保证他们是处于同步的关系的。

所以每个Partition 都有一个ISR,这个ISR里一定会有Leader自己,因为Leader肯定数据是最新的,然后就是那些跟Leader保持同步的follower,也会在ISR里。

 

kafka零数据丢失的配置方案

标签:art   有一个   响应   哪些   方案   处理   配置   ica   拉取   

原文地址:https://www.cnblogs.com/ssqq5200936/p/13125991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!