Siam博客

kafka:高可用和一致性,副本管理

2023-02-26

高可用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。

本文链接:
版权声明: 本文由 Siam原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
Tags: Kafka

扫描二维码,分享此文章