讨论一下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零数据丢失的配置方案的更多相关文章

  1. Spark Streaming容错的改进和零数据丢失

    本文来自Spark Streaming项目带头人 Tathagata Das的博客文章,他现在就职于Databricks公司.过去曾在UC Berkeley的AMPLab实验室进行大数据和Spark  ...

  2. Kafka设计解析(十一)Kafka无消息丢失配置

    转载自 huxihx,原文链接 Kafka无消息丢失配置 目录 一.Producer端二.Consumer端 Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生 ...

  3. Kafka SSL安装与配置

    1.概述 最近有同学咨询说,Kafka的SSL安全认证如何安装与使用?今天笔者将通过以下几个方面来介绍Kafka的SSL: Kafka 权限介绍 Kafka SSL的安装与使用 Kafka Eagle ...

  4. Atitit.兼具兼容性和扩展性的配置方案attilax总结

    Atitit.兼具兼容性和扩展性的配置方案attilax总结 文件配置法1 Jdbc多数据源文件配置发1 Bat文件配置法1 改进的文件配置法(采用类似i18n技术) 推荐1 使用自动化pc_id的方 ...

  5. Spring MVC之视图解析器和URL-Pattern的配置方案

    上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...

  6. Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境

    目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...

  7. Apache安全配置方案

    Apache安全配置方案 from:http://drops.wooyun.org/%e8%bf%90%e7%bb%b4%e5%ae%89%e5%85%a8/2727 apache的一些配置主要是通过 ...

  8. web.config中sessionState节点的配置方案

    web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,S ...

  9. gVim 配置方案 采用Vundle管理插件

    在Linux下配置vim非常简单,尤其是采用Vundle来管理插件,使得一切用起来得心应手. Maple大神在github上公布了自己的vim配置方案,相当方便好用.详见 https://github ...

随机推荐

  1. 【剑指offer】73.数组中出现次数超过一半的数字

    73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...

  2. Linux服务系统申请SSL证书方法

    inux主要面向专业性较强的技术人员,如果是WEB站点通常采取PHP语言为主选,可选的服务器环境中有Apache.Nginx.Tomcat这几类为主的框架环境,有的图方便会用一些可视化一键式的控制面板 ...

  3. 一次搞懂JavaScript对象

    索引 目录 索引 1. 对象与类 2.对象使用 2.1 语法 2.2 属性 3.对象特性 4.对象的创建 4.1 字面量 4.2 工厂函数 4.3 构造函数 4.4 class类 4.5 对象与单例模 ...

  4. POJ1723,1050,HDU4864题解(贪心)

    POJ1723 Soldiers 思维题. 考虑y坐标,简单的货舱选址问题,选择中位数即可. 再考虑x坐标,由于直接研究布置方法非常困难,可以倒着想:不管如何移动,最后的坐标总是相邻的,且根据贪心的思 ...

  5. SQlL 中 where 1=1

    提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以. 这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的. 如:web界面查询 ...

  6. 第二十七篇 -- QTreeWidget总结

    前言 之前写过几篇关于TreeWidget的文章,不过不方便查阅,特此重新整合作为总结.不过关于QtDesigner画图,还是不重新写了,看 第一篇 就OK. 准备工作 1. 用QtDesigner画 ...

  7. WebRTC 用例和性能

    WebRTC 用例和性能 实现低延迟.点对点传输是一项艰巨的工程挑战:有 NAT 遍历和连接检查.信令.安全.拥塞控制和无数其他细节需要处理.WebRTC 代表我们处理以上所有内容,这就是为什么它可以 ...

  8. SQL SERVER获取某张表创建的索引

    1 SELECT 索引名称=a.name 2 ,表名=c.name 3 ,索引字段名=d.name 4 ,索引字段位置=d.colid 5 FROM sysindexes a 6 JOIN sysin ...

  9. SQL SERVER获取表在哪些存储过程中使用过

    1.获取某张表在哪些存储过程中使用到 select distinct object_name(id) from syscomments where id in (select object_id fr ...

  10. Salesforce Integration 概览(三) Remote Process Invocation—Fire and Forget(远程进程调用-发后即弃)

    本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 我们在上一篇讲了远 ...