kafka零数据丢失的配置方案
讨论一下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里。
3、kafka的存储机制

由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,kafka采取了分片和索引机制。
它将每个partition 分为多个 segment,每个segment对应两个文件:".index"索引文件和 ".log" 数据文件。(一个分区下面有多个log文件,每个log文件大概有1G)
这些文件位于同一文件下,该文件夹的命名规则为 topic 名 - 分区号。
例如:first 这个topic 有三个分区,则其对应的文件夹为 first-0,first-1,first-2。
index和log 文件以当前 segment 的第一条消息的 offset命名。下图为 index文件和log文件的机构示意图:

.index 文件存储大量的索引信息, .log文件存储大量的数据,索引文件中的元数据指向对应数据文件中 Message 的物理偏移量。
4、kafka的 zero-copy 零拷贝技术
在kafka中消息存储模式中,数据存储在底层文件系统中。当有Consumer订阅了相应的topic消息,数据需要从磁盘中读取然后将数据写回到套接字中(socket)。
此动作看似只需较少的cpu活动,但它的效率非常低。首先内核读出全盘数据,然后将数据跨越内核用户推到应用程序,然后应用程序再次跨越内核用户将数据推回,
写出到套接字。应用程序实际上在这里担当了一个不怎么高效的中介角色,将磁盘文件的数据转入套接字。
数据每遍历用户内核一次,就要被拷贝一次,这会消耗CPU周期和内存带宽。幸运的是,您可以通过一个 零拷贝 的技巧来消除这些拷贝。
使用零拷贝的应用程序要求内核直接将数从磁盘文件拷贝到套接字,而无需通过应用程序。零拷贝不仅大大的提高了应用程序的性能,
而且还减少了内核与用户模式间的上下文切换。
java 类库通过 java.nio.channels.FileChannel 中的 transferTo() 方法来在 Linux和Unix系统上支持零拷贝。可以使用transferTo() 方法直接将
字节从它被调用的通道上传输到另外一个可写字节通道上,数据无需流经应用程序。
kafka零数据丢失的配置方案的更多相关文章
- Spark Streaming容错的改进和零数据丢失
本文来自Spark Streaming项目带头人 Tathagata Das的博客文章,他现在就职于Databricks公司.过去曾在UC Berkeley的AMPLab实验室进行大数据和Spark ...
- Kafka设计解析(十一)Kafka无消息丢失配置
转载自 huxihx,原文链接 Kafka无消息丢失配置 目录 一.Producer端二.Consumer端 Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生 ...
- Kafka SSL安装与配置
1.概述 最近有同学咨询说,Kafka的SSL安全认证如何安装与使用?今天笔者将通过以下几个方面来介绍Kafka的SSL: Kafka 权限介绍 Kafka SSL的安装与使用 Kafka Eagle ...
- Atitit.兼具兼容性和扩展性的配置方案attilax总结
Atitit.兼具兼容性和扩展性的配置方案attilax总结 文件配置法1 Jdbc多数据源文件配置发1 Bat文件配置法1 改进的文件配置法(采用类似i18n技术) 推荐1 使用自动化pc_id的方 ...
- Spring MVC之视图解析器和URL-Pattern的配置方案
上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...
- Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境
目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...
- Apache安全配置方案
Apache安全配置方案 from:http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2727 apache的一些配置主要是通过 ...
- web.config中sessionState节点的配置方案
web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,S ...
- gVim 配置方案 采用Vundle管理插件
在Linux下配置vim非常简单,尤其是采用Vundle来管理插件,使得一切用起来得心应手. Maple大神在github上公布了自己的vim配置方案,相当方便好用.详见 https://github ...
随机推荐
- Python+Requests+Xpath实现动态参数获取实战
1.古诗文网直接登录时,用浏览器F12抓取登录接口的入参,我们可以看到框起来的key对应的value是动态参数生成的,需获取到: 2.登录接口入参的值一般是登录接口返回的原数据值,若刷新后接口与对应源 ...
- POJ3615-Floyd
http://poj.org/problem?id=3615 因为只需要求所在路径的最大高度的最小值,而且n<=300,我们可以用floyd跑. g[i][j]=min(g[i][j],max( ...
- yaml 文件解析
前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...
- 解决VS2017调试卡住的问题
今天用VS2017调试程序时,程序没有按照预期的那样运行到断点处,并且结束调试时会卡很长时间. 那么解决方法是: 1. [Tools]-->[Options]-->[Debugging]- ...
- navigator导航页面跳转与绑定事件
效果图: 1. 新建一个index页面 主页面分为两块,上面是导航条,下面是轮播图. 导航条: <view class='menu'> <scroll-view scroll-x&g ...
- Linux系统进入redis并查询值
1.进入redisredis-cli -h ip -p port2.查看具体信息info 3.得到redis中存储的所有key值KEYS *4.获取指定key值的value值get "key ...
- 等Excel工作簿关闭后自动加密压缩备份
;; 等Excel工作簿关闭后自动加密压缩备份.ahk;; 腾讯QQ号 595076941; 作者:boai; 写作日期:2019年5月15日; 版本号:第1版; 手机号(中国移动) 138##### ...
- Java数组07——稀疏数组
稀疏数组 总结: 记录有效的坐标: 记录原始做表的大小和有效值的个数 记录每一个有效值的坐标 ,变成一个新的数组 age: package array; public class ArrayDe ...
- 深入理解jvm-2Edition-类文件结构
概述: 规范而独立的类文件结构以及只与类文件关联的虚拟机为Java实现了平台无关性,甚至还带来了一些语言无关性. 只要将源代码编译为Class文件规定的格式,JVM就可以执行. JVM的指令描述能力比 ...
- 用传纸条讲 HTTPS
我和小宇早恋了,上课的时候老说话. 老师把我们的座位分得很远,我在第一排,她在最后一排,我们中间隔了很多人. 但我们还是想通过传纸条的方式交流. 我们中间的那些同学,虽然坏心思比较多,但好在可以保证将 ...