Kafka知识总结(选举机制+控制器+幂等性)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

选举机制

控制器(Broker)选举

控制器就是一个Borker。

在Kafka集群中,有多个Broker节点,但是它们之间需要选举出一个Leader,其他的Broker充当Follower角色。

集群中第一个启动的Broker会通过在Zookeeper中创建临时节点/controller来让自己成为控制器。

其他Broker启动时也会在Zookeeper中创建临时节点,但是发现节点已经存在,所以它们会收到一个异常,意识到控制器已经存在,那么就会在Zookeeper中创建Watch对象,便于它们收到控制器变更的通知。

优先副本选举

如果一个分区的Leader副本不可用,就意味着整个分区不可用,此时需要从Follower副本中选举出新的Leader副本提供服务。

优先副本

指一个分区所在的AR集合的第一个副本。

比如分区1,它的AR集合是[2,0,1],表示分区1的优先副本就是在Broker2上。

  • 理想情况下,优先副本应该就是Leader副本。

对分区Leader副本进行选举的时候,尽可能让优先副本成为Leader副本。

在这里插入图片描述

控制器

控制器主要作用是在 ZooKeeper 的帮助下管理和协调整个 Kafka 集群。

集群中任意一台 Broker 都能充当控制器的角色,但是在运行过程中只能有一个 Broker 成为控制器。

Broker 在启动时,会尝试去 ZooKeeper 中创建 /controller 节点。

第一个成功创建 /controller 节点的 Broker 会被指定为控制器。

控制器的作用:

1.主题管理(创建、删除、增加分区)

2.分区重分配

3.Preferred 领导者选举

4.集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)

自动检测新增 Broker、Broker 主动关闭及被动宕机。

  • 比如,控制器组件会利用Watch 机制检查 ZooKeeper 的 /brokers/ids 节点下的子节点数量变更。

目前,当有新 Broker 启动后,它会在 /brokers 下创建专属的 znode 节点。

一旦创建完毕,ZooKeeper 会通过 Watch 机制将消息通知推送给控制器。

5.数据服务

向其他 Broker 提供数据服务。控制器上保存了最全的集群元数据信息,其他所有 Broker 会定期接收控制器发来的元数据更新请求,从而更新其内存中的缓存数据。

控制器故障转移(Failover)

当运行中的控制器突然宕机或意外终止时,Kafka 能够快速地感知到,并立即启用备用控制器来代替之前失败的控制器。

  • 该过程是自动完成的。

在这里插入图片描述

幂等性

0.11.0.0 版本支持增加了对幂等的支持。幂等是针对生产者角度的特性。幂等可以保证上生产者发送的消息,不会丢失,而且不会重复。

开启幂等性配置

只需要把 Producer 的配置 enable.idempotence 设置为 true 即可

props.put(“enable.idempotence”, ture)
//或者
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIGtrue)

底层具体实现原理就是用空间换时间的优化思路,即在broker端多存一些字段来标识数据的唯一性。

当Producer发送了具有相同字段值的消息后,broker会进行匹配去重,丢弃重复的数据。

他只能保证单分区上的幂等性,即一个幂等性Producer只能够保证某个topic的一个分区上不出现重复消息,无法实现多分区的幂等。此外,如果Producer重启,也会导致幂等重置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值