Replication in Kafka
Replication简介
Kafka中的Replication功能是为了给每个partition提供备份,当某个Broker挂掉时可以迅速实现故障切换(failover)。
我们可以在创建或修改topic时指定replica factor,来设定备份数目。请阅读如下实例来准确理解该参数作用:
如果一个Topic A的replica factor为3,则该topic的每一个partition都是3备份,包括1个leader和2个follower。
外界在访问Topic A时,读写只能通过leader partition进行。
注意:Kafka中默认总是打开Replication机制(如果你想为你的topic关闭该功能,一个变通的办法是指定Topic的replica factor为1。)
Kafka ISR vs Majority Vote(Quorum) .
Kafka会在Zookeeper中为每个Partition维持一个ISR (In-Sync Replicas,这里面的Replica能能跟得上对应Leader的消息更新)。一个被写入Leader的message, 只有当其被ISR中所有的replica都复制成功时,才能被Customer消费。
这保证了一个Customer不会消费到一个只在leader中保存的message(当leader挂掉时,message就会丢失。)另一方面,对于Producer来说,他可以选择是否等待一个message被所有replica复制成功,这取决于他对latency(延迟)和durability(可靠性)的偏好,可通过request.required.acks设定。
写到这里不得不提一下多数选举机制(Majority Vote),尽管Kafka没有采用。假设有replica factor设为3(2n+1), 则message写入leader后一旦有一个follower写入成功(n+1个replica写入成功),则该message就被认为"committed", 从而能被消费者访问。
Majority Vote的优势是其延迟取决于最快的replica, 而不是像Kafka现在的策略一样,延迟取决于最慢的replica。但Majority Vote的缺点也很明显,为了容忍一个failure, 需要3备份,这对大型系统来说很浪费资源。所以他更适合于管理元数据的分布式系统(规模较小),例如Zookeeper。
Kafka通过基于Message Set的Block I/O优化和Zero Copy技术, 来补偿ISR中潜在的延迟问题。
Partition Leader选举
Kafka的replica机制,还有一个缺点。当一个Broker挂掉时,其未flush到硬盘的数据是无法找回的。也就是说,Kafka的设计理念不保证Down机时内存数据的及时写回。这一点Kafka官方做了两点解释:
(1) 如果物理硬盘故障,很可能也不能保证数据完整性;
(2) 即使物理硬盘在故障时能保证完整性,每次写都做fsync将会对性能产生很大影响。
因而Kafka允许Replica重新加入ISR的条件是:这个Replica必须和相应的leader保持一致(完成resync)才能重新加入ISR,尽管他丢掉了故障时未写入硬盘的数据。
最坏的情况下,如果一个partition所有的replica都发生故障(相关的Broker均掉线),目前Kafka的策略是第一个重新恢复的replica默认为leader, 尽管有可能不属于原来的ISR.
未来Kafka希望能通过配置满足使用场景对于down机和dataloss的不同关切程度。也就是说,如果使用方需要保证数据不丢失,可以选择等待原有ISR中的replica复活作为Leader。代价是down机时间可能更长。
Replication in Kafka的更多相关文章
- Apache Kafka Replication Design – High level
参考,https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Replication Kafka Replication High-level ...
- Kafka设计解析(一)- Kafka背景及架构介绍
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...
- Kafka随笔一
一.KafKa所涉及到的名词概念: 1. Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. 2. Partition:是Kafka中横向扩展和一切 ...
- Kafka深度解析
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...
- Kafka深度解析,众人推荐,精彩好文!
作者: Jason Guo 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,并保证即使对TB级以上数据 ...
- kafka设计原理介绍
背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能 高吞吐 ...
- Kafka 技术文档
Kafka 技术文档 目录 1 Kafka创建背景 2 Kafka简介 3 Kafka好处 3.1 解耦 3.2 冗余 3.3 扩展性 3.4 灵活性 & 峰值处理能力 3.5 可恢复性 ...
- kafka基本原理学习
下载安装地址:http://kafka.apache.org/downloads.html 原文链接:http://www.jasongj.com/2015/01/02/Kafka深度解析 Kafk ...
- 【转载】Kafka High Availability
http://www.haokoo.com/internet/2877400.html Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则 ...
随机推荐
- AssetBundle依赖关系
原地址:http://www.cnblogs.com/realtimepixels/p/3652086.html Unity AssetBundle Dependencies In the last ...
- mybatis sql注入安全
1.mybatis语句 SELECT * FROM console_operator WHERE login_name=#{loginName} AND login_pwd=#{loginPwd} 2 ...
- 使用PHP_UML生成代码的UML图
在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题. 今天我就介绍一种, 自动生成UML图的方法. 假设, 我有一个项目文件夹:laruen ...
- 二分法查找(大于,大于等于x的最小,小于,小于等于x的最大值)
#include<stdio.h> #include<algorithm> using namespace std; //小于x的最大 //大于x的最小 //x的第一个 //x ...
- netbeans使用
下载地址 https://netbeans.org/downloads/ https://netbeans.org/downloads/start.html?platform=linux&la ...
- iOS开发--iOS及Mac开源项目和学习资料
文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...
- mysql 常用命令(备忘)
1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE ...
- BufferedReader方法-----Scanner方法
import java.io.*; import java.util.Scanner; public class C { public static void main(String []args) ...
- 275. H-Index II
题目: Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optim ...
- java cache过期策略两种实现,一个基于list轮询一个基于timer定时
最近项目要引入缓存机制,但是不想引入分布式的缓存框架,所以自己就写了一个轻量级的缓存实现,有两个版本,一个是通过timer实现其超时过期处理,另外一个是通过list轮询. 首先要了解下ja ...