首页 > 其他分享 >Kafka中unclean.leader.election.enable参数的内涵

Kafka中unclean.leader.election.enable参数的内涵

时间:2023-02-01 10:05:11浏览次数:36  
标签:副本 Kafka enable election leader unclean


Kafka中unclean.leader.election.enable参数的内涵

官网说明:http://kafka.apache.org/documentation/#configuration

Kafka中unclean.leader.election.enable参数的内涵_kafka

参考上图,某种状态下,follower2副本落后leader副本很多,并且也不在leader副本和follower1副本所在的ISR(In-Sync Replicas)集合之中。follower2副本正在努力的追赶leader副本以求迅速同步,并且能够加入到ISR中。但是很不幸的是,此时ISR中的所有副本都突然下线,情形如下图所示:

此时follower2副本还在,就会进行新的选举,不过在选举之前首先要判断unclean.leader.election.enable参数的值。如果unclean.leader.election.enable参数的值为false,那么就意味着非ISR中的副本不能够参与选举,此时无法进行新的选举,此时整个分区处于不可用状态。如果unclean.leader.election.enable参数的值为true,那么可以从非ISR集合中选举follower副本成为新的leader。

我们进一步考虑unclean.leader.election.enable参数为true的情况,在上面的这种情形中follower2副本就顺其自然的称为了新的leader。随着时间的推进,新的leader副本从客户端收到了新的消息,如上图所示。

此时,原来的leader副本恢复,成为了新的follower副本,准备向新的leader副本同步消息,但是它发现自身的LEO比leader副本的LEO还要大。Kafka中有一个准则,follower副本的LEO是不能够大于leader副本的,所以新的follower副本就需要截断日志至leader副本的LEO处。

如上图所示,新的follower副本需要删除消息4和消息5,之后才能与新的leader副本进行同步。之后新的follower副本和新的leader副本组成了新的ISR集合,参考下图。

原本客户端已经成功的写入了消息4和消息5,而在发生日志截断之后就意味着这2条消息就丢失了,并且新的follower副本和新的leader副本之间的消息也不一致。也就是说如果unclean.leader.election.enable参数设置为true,就有可能发生数据丢失和数据不一致的情况,Kafka的可靠性就会降低;而如果unclean.leader.election.enable参数设置为false,Kafka的可用性就会降低。具体怎么选择需要读者更具实际的业务逻辑进行权衡,可靠性优先还是可用性优先。从Kafka 0.11.0.0版本开始将此参数从true设置为false,可以看出Kafka的设计者偏向于可靠性,如果能够容忍uncleanLeaderElection场景带来的消息丢失和不一致,可以将此参数设置为之前的老值——true。


标签:副本,Kafka,enable,election,leader,unclean
From: https://blog.51cto.com/u_14389461/6030671

相关文章

  • kafka拦截器
    1.简单介绍kafka拦截器用于生产者和消费者对统一对消息做处理。且可以设置多个拦截器,用于链式调用。生产者拦截器可以用于生产消息前做处理,消费者可以用于消费......
  • .net core 下使用 Kafka 生产者批量发送给消息处理,使用事务(四)
    生产者批量发送消息,使用事务,要么全部失败要么全部成功重要说明事物id必须要设置producerConfig.TransactionalId=Guid.NewGuid().ToString();//必须设置事物id 1......
  • springboot 怎么启动aop @EnableAspectJAutoProxy
    SpringBoot项目使用aophttps://blog.csdn.net/qq_39176307/article/details/124714191Spring-AOPSpringBoot自动配置和启动SpringAOPhttps://www.bbsmax.com/A/QV5ZX3......
  • Rabbitmq 与kafka
    Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设......
  • 1.5万字长文:从 C# 入门 Kafka
    1.5万字长文:从C#入门Kafka  目录1,搭建Kafka环境安装docker-compose单节点Kafka的部署Kafka集群的部署2,Kafka概念基本概念关于Ka......
  • k8s~fluentd从kafka到elk
    有时为了日志解耦,通常不把日志打到文件,而是直接打到kafka,而为了分析日志,我们可以通过sidecar的方式,把日志从kafka写入到es里,而通过kibana对日志进行分析。我的k8s-fluentd......
  • 1.5万字长文:从 C# 入门 Kafka
    目录1,搭建Kafka环境安装docker-compose单节点Kafka的部署Kafka集群的部署2,Kafka概念基本概念关于Kafka脚本工具主题管理使用C#创建分区分区与复制生产者消......
  • Apache Kafka 的基本概念
    ​​基本概念​​主题Topictopic是Kafka最基础的组织单位,类似于关系数据库中的数据表。做为使用kafka的开发者,你最应该考虑的是和topoc相关的抽象。创建不同的topi......
  • ubuntu下安装kafka集群connector
    1.首先安装kafka集群,安装步骤参考链接如下:2.创建安装connector安装目录mkdir-p/kafka/kafka-1/kafka_2.12-2.2.1/connector-pluginmkdir-p/kafka/kafka-2/kafka_2.12......
  • ubuntu下安装zookeeper和kafka伪集群
    1.创建目录mkdir-p/zookeeper/zkp-1/zookeeper/zkp-2/zookeeper/zkp-32.下载zookeeper链接地址:​​​http://mirror.bit.edu.cn/apache/zookeeper/​​​命令下载:c......