高可用Kafka
Kafka是一个分布式的消息中间件,集群中少不了的问题就是:数据一致性和服务可用性。
- 数据一致性: 副本同步
- 服务可用性: 对外服务节点的维护
数据冗余
Kafka实例启动后,会向zookeeper汇报自己的地址信息等,加入集群
Kafka中每个分区都可以有多个副本,其中一个副本被选为领导者(Leader),其余副本被称为追随者(Follower)。
当生产者发送消息到一个分区时,消息首先被写入Leader副本中,然后Leader副本将消息复制到所有的Follower副本中,这样就实现了数据的冗余备份和高可用性。
谁来当领导
每个Follower副本会与Leader副本保持心跳连接,如果Leader副本失效,Follower副本会立即发现,并开始争取成为新的Leader副本。Kafka使用ZooKeeper来维护分区和副本的状态信息,并实现副本选举机制。
根据节点与Leader的同步滞后状况,可以将节点分为俩个类别:同步副本和非同步副本
在Kafka中,同步副本的官方英文名词是"Synchronous Replica",而非同步副本的官方英文名词则是"Asynchronous Replica"。
- 同步副本和非同步副本
非同步副本指的是与Leader副本存在滞后的副本,即消息进度与Leader副本有一定的延迟。非同步副本会在Leader副本接收到消息后,异步地将消息复制到本地磁盘,并向Leader副本返回应答,但不会等待同步完成。非同步副本可以提高系统的吞吐量,但可能会牺牲一定的数据可靠性。
Kafka的副本同步机制是可配置的,可以根据应用场景的需求,灵活地配置同步副本的数量和非同步副本的数量,以达到最优的性能和可靠性。通常情况下,同步副本的数量越多,数据可靠性越高,但性能也会受到一定的影响。非同步副本的数量越多,系统的吞吐量越高,但可能会出现数据丢失的情况。需要根据实际场景选择合适的配置策略。
默认不开启: 从节点只有
同步副本
的节点才有资格竞选成为Leader
“ISR”,它指的是"In-Sync Replica",是一种基于同步副本机制的副本集合。在Kafka中,只有处于ISR集合中的副本才能够参与消息的读写操作。当副本与Leader之间的同步滞后超过一定阈值时,副本就会被从ISR集合中移除,此时它将不能够参与消息的读写操作,直到与Leader之间的同步恢复正常,重新加入ISR集合。
领导和从节点都干写什么
- 领导者(leader),负责接收和发送消息,其他的是追随者(follower),负责从领导者同步消息。
- 副本之间尽量分散在不同的节点(broker)上,以提高容错能力。
数据一致性
数据一致性主要取决于生产者的写入方式和领导者的选举方式
写入方式:Kafka提供了三种不同的ack参数来控制生产者在发送消息时需要等待多少个副本确认。
- 如果ack=0,表示生产者不需要等待任何确认,速度最快,但是可能会丢失数据;
- 如果ack=1,表示生产者只需要等待领导者确认,速度较快,但是可能会出现数据不一致;
- 如果ack=all,表示生产者需要等待所有副本确认,速度最慢,但是可以保证数据一致性。
领导者选举方式:有两种选举方式:clean leader election和unclean leader election
- clean leader election表示只有同步副本(ISR)才能成为新的领导者,这样可以保证数据一致性;
- unclean leader election表示任何副本都能成为新的领导者,这样可以提高可用性,但是可能会出现数据不一致。
Kafka提供了一个参数unclean.leader.election.enable
来控制是否允许unclean leader election,默认为true。
扫描二维码,分享此文章