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宕机,则 ...
随机推荐
- DevSecOps简介(二)
越来越多的组织机构开始采取 DevOps 实践,作为呼应,本文将概括强调很多人认为这一实践缺失的部分:安全.随着 NV (网络虚拟化) 和 NFV (网络功能虚拟化)的使用率逐步攀升,在开发和部署流程 ...
- CSS 知识积累
一.关于定位 1.相对定位下,不需要设定块级元素的宽度,只需要设定高度,即可以使该块级元素自适应,如果内有固定高度子元素,可以不设高度.而且可以进行top left定位. 2.相对定位下,如果两个兄弟 ...
- uva 10817
Problem D: Headmaster's Headache Time limit: 2 seconds The headmaster of Spring Field School is cons ...
- C#中反射泛型 CreateInstance
假设1我有个类叫SortClass,类中有个BubbleSort(int[] array)用于给数组进行排序. 假设2我有个类叫SortT<T>,类中有个BubbleSort(T[] ar ...
- Understanding node.js
Node.js has generally caused two reactions in people I've introduced it to. Basically people either ...
- Maven的配置文件pom.xml
Maven的配置文件pom.xml 简介: 什么是POM? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml. ...
- proc插入数据到数据库
#include<stdio.h>EXEC SQL INCLUDE SQLCA; void insert (char password_[6],char id_[20],int balan ...
- hdu 1567 2006 (题意理解容易出错)
#include<stdio.h> #include<vector> #include<algorithm> using namespace std; struct ...
- 跨浏览器兼容的HTML5视频音频播放器
HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件.而html5medi ...
- iOS开发--git
http://blog.chinaunix.net/uid-26495963-id-3474178.html 相关知识 gnu interactive tools 一句话概括git: Git is a ...