概念

在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的Partition数据都不可被消费,这与Kafka数据持久性及Delivery Guarantee的设计目标相悖;

所以,0.8 以后就引入了副本机制;

引入副本机制后带来的问题

引入Replication之后,同一个Partition可能会有多个Replica,而这时需要在这些Replica中选出一个Leader,Producer和Consumer只与这个Leader交互,其它Replica作为Follower从Leader中复制数据。

因为需要保证同一个Partition的多个Replica之间的数据一致性(其中一个宕机后其它Replica必须要能继续服务并且即不能造成数据重复也不能造成数据丢失)。如果没有一个Leader,所有Replica都可同时读/写数据,那就需要保证多个Replica之间互相(N×N条通路)同步数据,数据的一致性和有序性非常难保证,大大增加了Replication实现的复杂性,同时也增加了出现异常的几率。而引入Leader后,只有Leader负责数据读写,Follower只向Leader顺序Fetch数据(N条通路),系统更加简单且高效。

kafka如何分配副本位置?

为了更好地做负载均衡,Kafka尽量将所有的Partition均匀分配到整个集群上。一个典型的部署方式是一个Topic的Partition数量大于Broker的数量。同时为了提高Kafka的容错能力,也需要将同一个Partition的Replica尽量分散到不同的机器。实际上,如果所有的Replica都在同一个Broker上,那一旦该Broker宕机,该Partition的所有Replica都无法工作,也就达不到HA的效果。同时,如果某个Broker宕机了,需要保证它上面的负载可以被均匀的分配到其它幸存的所有Broker上。

Kafka分配Replica的算法如下:

将所有Broker(假设共n个Broker)和待分配的Partition排序
将第i个Partition分配到第(i mod n)个Broker上
将第i个Partition的第j个Replica分配到第((i + j) mod n)个Broker上

如何设置比较好?

复制因子
新topic的默认复制因子为1。对于高可用性的生产系统,Cloudera建议将复制因子设置为至少3。这至少需要3个Kafka broker。

不洁的领导人选举
禁用不干净的领导者选举后,如果包含该分区的leader replicabroker不可用,并且不存在任何in-sync replica来替换它,则该分区将变为不可用,直到leader replica或另一个in-sync replica重新上线。 启用不干净的领导者选择,以允许不同步的副本成为领导者并保留分区的可用性。 领导者选举不干净时,未同步到新领导者的消息将丢失。 这样可以在一致性(保证消息传递)和可用性之间取得平衡。

Acks
在编写或配置Kafka生产者时,您可以使用属性选择在确认消息之前提交新消息的副本数量。
根据您的要求,设置为(立即确认消息,而无需等待任何代理提交),(在领导者提交消息后确认)或((在提交所有同步副本后确认)。 设置为可以提供最高的一致性保证,但会降低对集群的写入速度.requiredAcks01-1requiredAcks-1

参考

深入解析Kafka高可用设计如何步步为营 - 大数据 -

Kafka High Availability and Consistency

Kafka高可用机制入门相关推荐

  1. 2021年大数据Hadoop(十四):HDFS的高可用机制

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 HDFS的高可用机制 HDFS高可用介绍 组件介绍 Nam ...

  2. 因为一次 Kafka 宕机,终于搞透了 Kafka 高可用原理!

    -     Kafka 宕机引发的高可用思考     - 问题要从一次Kafka的宕机开始说起. 笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的 RabbitMQ ,而是采 ...

  3. 因为一次宕机,终于搞透了 Kafka 高可用原理!

    1 Kafka 宕机引发的高可用思考 问题要从一次Kafka的宕机开始说起. 笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的 RabbitMQ ,而是采用了设计之初就为日志 ...

  4. kafka高可用集群搭建

    ################################################################# 物理环境(两台机子组成的真实集群): Desktop一个zk节点 L ...

  5. HA:HADOOP高可用机制

    课程大纲(HADOOP高可用机制) HA运作机制 什么是HA HADOOP如何实现HA HDFS-HA详解 HA集群搭建 目标: 掌握分布式系统中HA机制的思想 掌握HADOOP内置HA的运作机制 掌 ...

  6. MySQL高可用--MGR入门(4)异常恢复

    点击蓝字 关注我们 前文阅读: 1.MySQL高可用--MGR入门(1)单主/多主模式搭建 2.MySQL高可用--MGR入门(2)组复制监控常用相关表 3.MySQL高可用--MGR入门(3)单主/ ...

  7. MySQL高可用--MGR入门(3)单主/多主模式切换

    点击蓝字 关注我们 前文阅读: 1.MySQL高可用--MGR入门(1)单主/多主模式搭建 2.MySQL高可用--MGR入门(2)组复制监控常用相关表 实验演示规划:(3台虚拟机,MySQL版本为8 ...

  8. 我的架构梦:(九十九)消息中间件之RocketMQ的高可用机制——消息消费高可用

    欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 在前两篇我们介绍了 我的架构梦:(九十七)消息中间件之Ro ...

  9. 我的架构梦:(九十八)消息中间件之RocketMQ的高可用机制——消息发送高可用

    欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.前言 在上一篇我们介绍了 我的架构梦:(九十七)消息中间件之Ro ...

最新文章

  1. Office 365:如何管理Office 365中的Ophaned Mailbox
  2. arthas 排查内存溢出_Java 应用线上问题排查思路、常用工具小结
  3. 计算机语言中tc是什么,新人必须了解的几个TC常用语和脚本基础知识!
  4. 卸载利器IObit Uninstaller Portable v9.4.0.20绿化版
  5. C#按指定长度分割字符串
  6. B - Catch That Cow(广度搜索)
  7. 面向对象11:向下转型的使用、instanceof关键字、Object类的使用
  8. IEEE Access模板caption无法换行,换行后标题不居中解决办法
  9. ecshop二次开发笔记
  10. 软件测试自学乐器儿童画,查找「国庆节儿童画大全」安卓应用 - 豌豆荚
  11. html消除表格线,html5 消除表格线
  12. 无法在节点上执行物理内存检查
  13. 【Java:JDBC+MySQL实现学生信息管理系统】
  14. 图片预览(原生js实现)
  15. mysql dump 2013_mysqldump 错误2013 Lost connection
  16. 微信支付商户接入(一)
  17. 做html5抽奖程序xu,用jQuery实现抽奖程序
  18. Dev C++下载及使用
  19. 深入浅出Pytorch函数——torch.zeros
  20. 槟城usm大学计算机专业怎么样,马来西亚理科大学USM比你想的好太多了!

热门文章

  1. Linux环境下Git的安装以及使用
  2. android jni 多线程,[Android]JNI进阶--线程池
  3. notepad怎么运行php程序,notepad怎么运行代码
  4. linux学习笔记:我的第一个shell脚本
  5. Java基础教程【第九章:异常处理】
  6. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复
  7. python爬取京东数据加载失败_Python爬取京东商品数据
  8. MySQL基础_练习和一个经典面试题
  9. html 目录生成器,Tocify:动态节点目录菜单生成器_html/css_WEB-ITnose
  10. android robust加固,Robust spectroscopic optical probe