Kafka 高可用设计

Kafka在早期版本中,并不提供高可用机制,一旦某个Broker宕机,其上所有Partition都无法继续提供服务,甚至发生数据丢失 对于分布式系统,当集群规模上升到一定程度后,宕机的可能性大大提高,对高可用性就有了非常高要求 Kafka在0.8版本提供了高可用机制,主要是增加了Partition的复制设计 引入Partition的Replication之后,同一个Partition的就有了多个副本,把这些副本均匀的分布到多个Broker上,就保证了数据的安全,不再担心某个Broker宕机后使其中的Partition失效

Partition没有Replication时,写入消息的逻辑很简单,现在有个多个副本,写消息时如何处理呢? Kafka给多个Replication设置了一个Leader,其他副本叫做follower,Producer发送消息时,只发送给Leader,follower再从leader复制消息

Kafka的消息复制思路比较独特,既不是同步复制,也不是完全的异步复制 同步复制非常安全,要求所有follower都复制完成才算是commit成功,但极大影响了吞吐率 完全异步复制的话性能很高,只要leader写入成功就算完成了,follower异步从leader进行复制,但安全性不好,数据丢失风险高 Kafka的Leader会看哪些follower的数据与自己是同步的,将其视为好同志,重点培养,放入一个列表,称为ISR(in-sync replica),当Leader收到新消息时,将消息发给列表成员,这些成员收到后,马上返回确认信息,Leader收到他们的确认后,就告诉 Producer消息已经提交成功 所以Kafka是采用了同步和完全异步的折中方式,让一部分高效的follower同步,让其他follower异步

Replication的目的就是在发生意外时及时顶上,leader失效后,就需要从follower中马上选一个新的leader 选举时优先从ISR中选定,因为这个列表中follower的数据是与leader同步的,从他们中间选取可以保证数据完整 但如果不幸ISR列表中的follower都不行了,就只能从其他follower中选取,这时就有数据丢失的可能了,因为不确定这个follower是否已经把leader的数据都复制完成了 还有一种极端情况,就是所有副本都失效了,这时有两种方案 (1)等待ISR中的一个活过来,选为Leader,数据可靠,但活过来的时间不确定 (2)选择第一个活过来的Replication,不一定是ISR中的,选为leader,以最快速度恢复可用性,但数据不一定完整 Kafka支持通过配置选择使用哪一种方案,可以根据可用性和一致性进行权衡

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2016-02-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding

django2.0入门教程第一节启动开发模式下的服务器

1572
来自专栏進无尽的文章

扒虫篇-此构建版本无效

一个公司的项目 1.0 版本被苹果拒绝了,问题修改好,再次上传后,构建版本时,发现上传的版本都是提示:此构建版本无效。

1161
来自专栏后端技术探索

深入 Nginx:我们是如何为性能和规模做设计的

NGINX 在网络应用中表现超群,在于其独特的设计。许多网络或应用服务器大都是基于线程或者进程的简单框架,NGINX突出的地方就在于其成熟的事件驱动框架,它能应...

730
来自专栏云计算

基于Go语言使用NATS Streaming构建分布式系统和微服务

一段时间前,我写了一篇名为向 Go 语言开发者介绍 NATS 的博客文章以便使用Apcera NATS 作为基于GO语言的构建分布式系统和微服务的消息系统。在本...

1.6K3
来自专栏友弟技术工作室

Nginx架构--nginx系列之二Nginx的架构详解

Nginx的架构详解 今天,回家,这篇文章在机场候机,原文来自这里 NGINX 在网络应用中表现超群,在于其独特的设计。许多网络或应用服务器大都是基于线程或者进...

4469
来自专栏人云亦云

Storm参数配置及代码优化

4115
来自专栏FreeBuf

记我在HackerOne上参与的一次漏洞众测邀请项目

这是一件关于我参与Hackerone平台某漏洞邀请项目的事,在此我要感谢该项目发起公司,他们友善的态度、及时的漏洞修复和奖金发放效率,让所有存在的提交漏洞都能在...

3944
来自专栏大魏分享(微信公众号:david-share)

最流行的5大开源Web服务器

根据维基百科介绍,web服务器是“通过HTTP协议处理web请求的计算机系统”(a computer system that processes request...

6085
来自专栏架构说

开源日志系统比较:scribe、chukwa、kafka、flume

1. 背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下...

36412
来自专栏FreeBuf

OpenSSH曝高危漏洞,Linux主机面临暴力破解威胁

OpenSSH软件被爆出一个简单却高危的漏洞,攻击者可以在短时间内进行数千次的登录尝试。 ? OpenSSH是最流行的Linux系统进行远程控制的软件。一般来说...

2867

扫码关注云+社区

领取腾讯云代金券