个人技术分享

一步一个脚印,一天一道面试题。

数据可靠性一直是各个技术都需要的一个特性。不能在使用过程中数据被错误消费,多消费少消费,或者直接漏了数据。那就来看看热门消息队列 Kafka 在数据可靠性方面做了些什么。

  1. Acknowledgment(ACK)机制
    生产者发送数据给Kafka后,可以有确认机制来保证数据是不是正常的发送成功。 Kafka 提供了三种级别的 ACK 配置,通过 acks 配置项控制,这些级别决定了生产者何时认为消息已成功发送: - acks=0:生产者不会等待任何来自 broker 的确认,消息发送后立即认为成功。这是最快但最不安全的模式。

    • acks=1(默认设置):生产者只需等待 leader 节点的确认。这种方式在 leader 落盘后即发送 ACK,但如果此时 leader 挂掉,未复制到 follower,数据可能会丢失。
    • acks=all:生产者等待所有参与复制的 ISR 节点确认消息。这是最安全但也是延迟最高的模式,因为只有当所有副本都确认接收到消息时,才认为消息发送成功。
  2. 副本与 ISR
    大数据组件基本都会有副本,如果某个节点异常则可以使用副本数据,防止数据丢失。同时副本 Replica 需要跟 leader 保持进度同步。 ISR(In-Sync Replica),就是处于同步的副本。 也就是说每个副本都会同步 leader 的进度,这样如果某个节点的时候,I就可以立即从 ISR 中选出副本,防止数据丢失。

  3. 分区日志与持久化
    Kafka 把每个主题分为多个分区,并将每个分区的日志存储在硬盘上,从而实现长期存储。这样即使在节点故障后,数据也能从其他副本恢复。

  4. Leader 选举与故障转移
    当 leader 节点宕机时, Kafka 会从 ISR 列表中选择一个新的 leader,确保数据可以被读取和写入 ,保证高可用性。这个过程依赖 Zookeeper

  5. 消费者偏移量管理
    ACK 确认机制是用于保证生产者的数据可靠性,那 offset偏移量就是用于保证消费者的数据可靠性。这样消费者可以知道,数据消费到哪个位置,避免重复消费。

  6. 幂等性与两阶段提交
    Kafka 支持幂等生产者,确保在特定时间内向同一分区发送的消息,即使被多次尝试发送,也只会被存储一次。
    此外,Kafka 也支持两阶段提交,允许跨多个主题和分区的生产和消费操作保持原子性,进一步增强了数据的一致性。

我是近未来,祝你变得更强!