返回

史上最全的Kafka 3.x系列教程之三:揭秘Kafka-Broker与Kafka-Kraft

后端

Kafka 集群中的关键部件:Kafka 代理和 Kafka Raft

您是否对 Kafka 的内部运作感兴趣?如果您想深入了解 Kafka 代理和 Kafka Raft 在 Kafka 集群中的作用,那么这篇文章非常适合您。

Kafka 代理:数据存储和管理的基石

Kafka 代理是 Kafka 集群中不可或缺的组件,负责存储和管理数据。每一个 Kafka 代理都是一个独立的服务器,它们协同工作,组成一个分布式的系统。

每个 Kafka 代理都有自己的磁盘空间,它将数据存储在磁盘上。此外,Kafka 代理还管理数据的分区。每个主题可以分为多个分区,每个分区都存储在不同的 Kafka 代理上。

Kafka Raft:Kafka 集群中的协调员

Kafka Raft 是一种分布式共识协议,它确保 Kafka 集群中所有代理达成一致的状态。Kafka Raft 利用 Apache Zookeeper,一个分布式协调服务,作为协调器,为 Kafka 代理提供一种协调机制。

Kafka Raft 的工作原理如下:

  1. 当一个新的 Kafka 代理启动时,它会向 Zookeeper 注册。
  2. Zookeeper 维护着所有活动 Kafka 代理的列表。
  3. 每台 Kafka 代理中都运行着一个控制器,首先注册的控制器即为控制器领导者。
  4. 控制器领导者会监听注册的代理节点状态的变化。
  5. 控制器开始选举领导者。

选举规则:

  1. 在同步复制集 (ISR) 中存活的节点优先,按自动复制因子 (AR) 中的位置排列。
  2. 领导者也会按 AR 中的顺序轮流选举。

Kafka 代理和 Kafka Raft 的重要性

Kafka 代理和 Kafka Raft 对于 Kafka 集群的稳定性和可靠性至关重要。如果没有 Kafka 代理,数据将无法存储和管理;如果没有 Kafka Raft,Kafka 代理将无法进行通信和协调。

因此,Kafka 代理和 Kafka Raft 是 Kafka 集群中不可或缺的部件。

代码示例:创建 Kafka 代理

以下是一个使用 Java 创建 Kafka 代理的代码示例:

import org.apache.kafka.common.config.ConfigException;
import org.apache.kafka.common.utils.SystemTime;
import org.apache.kafka.common.utils.Time;
import org.apache.kafka.server.KafkaConfig;
import org.apache.kafka.server.KafkaServer;

public class KafkaBroker {

    public static void main(String[] args) {
        // 加载 Kafka 配置
        KafkaConfig config = new KafkaConfig(getProperties());

        // 创建 Kafka 时钟
        Time time = new SystemTime();

        // 创建 Kafka 服务器
        KafkaServer server = new KafkaServer(config, time);

        // 启动 Kafka 服务器
        server.startup();

        // 等待 Kafka 服务器关闭
        server.awaitShutdown();
    }

    private static Properties getProperties() {
        Properties properties = new Properties();
        properties.put(KafkaConfig.BROKER_ID_CONFIG, "0");
        properties.put(KafkaConfig.ZOOKEEPER_CONNECT_CONFIG, "localhost:2181");
        properties.put(KafkaConfig.LISTENERS_CONFIG, "PLAINTEXT://localhost:9092");
        return properties;
    }
}

常见问题解答

  1. Kafka 代理和 Kafka Raft 之间有什么区别?
    Kafka 代理负责存储和管理数据,而 Kafka Raft 负责管理 Kafka 代理之间的通信和协调。
  2. Zookeeper 在 Kafka 集群中的作用是什么?
    Zookeeper 是一个分布式协调服务,它为 Kafka 代理提供协调机制。
  3. Kafka 集群中的领导者是如何选出的?
    领导者是由 Kafka Raft 根据同步复制集 (ISR) 中存活的节点和自动复制因子 (AR) 来选举的。
  4. Kafka Raft 如何确保一致性?
    Kafka Raft 使用 Zookeeper 作为协调器,通过复制日志和强制一致性状态变更来确保一致性。
  5. Kafka 集群中的分区有什么好处?
    分区允许在多个 Kafka 代理上分布数据,从而提高可扩展性和容错能力。