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宕机,则 ...
随机推荐
- 如何在帝国cms后台菜单栏中添加删除链接?
下午测试一个网上下载经过二次开发的帝国cms系统,还原完数据进入后台ytkah发现菜单栏多出了几个链接,有点不习惯,就想着怎么把它去掉.由于自己用的win7系统,搜索时没有像xp那样可以搜索包含某字符 ...
- 关于linux系统如何实现fork的研究(二)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 前一篇关于linux系统如何实现fork的研究(一)通过代码已经说明了从用户态怎么通过软中断实现调用系统调 ...
- centos 安装软件
1)一种是软件的源代码,您需要自己动手编译它.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz).2)另一种是软件的可执行程序,你只要安装它就可以了.这种软件安装包通常被是一个RP ...
- BZOJ1083: [SCOI2005]繁忙的都市
水题之王SP…这题就裸的最小生成树 /************************************************************** Problem: 1083 User ...
- swift学习网站
http://letsswift.com/category/swiftguide/http://www.imooc.com/course/list?is_easy=3&c=ioshttp:// ...
- Services学习(一)
对于需要长期运行,例如播放音乐.长期和服务器的连接,即使已不是屏幕当前的activity仍需要运行的情况,采用服务方式.服务将通过API触发启动或者通过IPC(Interprocess Communi ...
- 定时每天执行前一天的数据导入oracle
#!/bin/bash export LANG="en_US.UTF-8" #设定时间变量,为前一天时间 log_date=`date +%Y-%m-%d -d "-1 ...
- Android 4.4KitKat AudioRecord 流程分析
Android是架构分为三层: 底层 Linux Kernel 中间层 主要由C++实现 (Android 60%源码都是C++实现) 应用层 主要由JAVA开发的应用程序 应用程序执行 ...
- Shell实现跳板机,为什么用跳板机
整理自:http://blog.chinaunix.net/uid-22101889-id-3167454.html 注意:请谨慎使用,到现在为止,使用了,我还没找到改回去的方法. 1. 问题 ...
- C#加密算法汇总
方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符串 /// </s ...