Kafka高可用机制入门

概念

在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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一个分布式流处理平台,具有高可用性。下面是Kafka高可用测试的一般步骤: 1. 配置Kafka集群:首先,需要配置一个Kafka集群,包括多个Kafka broker节点和至少一个Zookeeper节点。确保集群中的每个节点都正确配置,并且它们可以相互通信。 2. 创建主题和分区:使用Kafka提供的命令行工具或API,在Kafka集群中创建一个或多个主题,并为每个主题指定适当的分区数。 3. 启动Kafka集群:启动Kafka集群中的每个节点,包括Kafka broker和Zookeeper节点。确保每个节点都成功启动,并且它们之间的通信正常。 4. 发布和消费消息:使用Kafka提供的生产者API将消息发布到指定的主题中。然后,使用消费者API从相同的主题中消费消息。确保消息能够正常发布和消费,并且数据能够正确传递。 5. 测试故障转移:模拟一个节点故障,例如关闭一个Kafka broker节点。观察集群中的其他节点是否能够接管该节点的工作,并继续提供服务。确保故障转移过程顺利进行,并且服务不会中断。 6. 测试数据复制:在Kafka集群中的一个节点上发布消息,并确保消息能够被其他节点正确复制。验证数据复制机制是否正常工作,并且数据能够在集群中的多个节点之间同步。 7. 测试负载均衡:增加或减少Kafka集群中的节点数量,观察集群是否能够自动进行负载均衡,并且数据能够均匀地分布在各个节点上。 8. 测试容错性:模拟多个节点故障,例如关闭多个Kafka broker节点。观察集群是否能够继续常工作,并且数据不会丢失或损坏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值