文章

在 macOS 上使用 JDK 17 安装和配置 Kafka 最新版本(KRaft 模式)

本文将详细介绍如何在 macOS 上安装并配置 Kafka 的最新版本,使其在 KRaft 模式 下运行。KRaft 模式是 Kafka 3.x 及以上版本推荐的模式,它完全移除了对 ZooKeeper 的依赖。整个过程基于 JDK 17Homebrew 进行安装和配置,并确保 Kafka 可以在后台运行并正常创建主题。

环境要求

  • macOS 版本:macOS Monterey 及以上版本

  • Java 版本:JDK 17

  • Kafka 版本:3.x 及以上(KRaft 模式)

  • 包管理器:Homebrew

步骤 1:使用 Homebrew 安装 Kafka

首先,使用 Homebrew 安装 Kafka。Homebrew 是 macOS 上常用的包管理工具,可以简化软件的安装与更新。

brew install kafka

这条命令会安装 Kafka 的最新版本,Kafka 的配置文件通常位于 /opt/homebrew/etc/kafka/

步骤 2:配置 Kafka 使用 KRaft 模式

Kafka 默认依赖 ZooKeeper 来管理集群元数据,但在 Kafka 3.x 及以后的版本中,推荐使用 KRaft 模式 取代 ZooKeeper 来管理元数据。在这种模式下,Kafka 自身充当 broker 和 controller 角色。

  1. 打开 server.properties 文件

    使用 Vim 编辑 Kafka 的配置文件 server.properties

    vim /opt/homebrew/etc/kafka/server.properties
  2. 修改配置文件

    在文件中进行以下修改,确保 Kafka 使用 KRaft 模式并设置好监听器:

    # 节点的唯一 ID,标识这个 Kafka broker
    node.id=1
    ​
    # broker 的 ID,需要与 node.id 一致
    broker.id=1
    ​
    # 启用 broker 和 controller 的角色
    process.roles=broker,controller
    ​
    # 指定选举成员的集群节点,格式为 node.id@host:port
    controller.quorum.voters=1@localhost:9093
    ​
    # 设置 broker 和 controller 的监听地址
    listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
    ​
    # 指定 controller.listener.names,匹配 CONTROLLER 监听器
    controller.listener.names=CONTROLLER
    ​
    # 指定不同监听器的安全协议
    listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
    ​
    # 存储日志的位置
    log.dirs=/tmp/kraft-combined-logs

    配置项解释

    • node.id=1broker.id=1:这两个 ID 都设置为 1,确保 Kafka 节点的唯一性,在 KRaft 模式下它们必须保持一致。

    • process.roles=broker,controller:定义当前节点既作为 broker,又作为 controller。

    • controller.quorum.voters=1@localhost:9093:定义控制器集群中的选举成员。

    • listeners:设置 Kafka 的监听地址,PLAINTEXT://localhost:9092 用于消息传递,CONTROLLER://localhost:9093 用于 controller 管理。

    • controller.listener.names=CONTROLLER:指定控制器监听器的名称为 CONTROLLER,必须与 listeners 中定义的监听器一致。

    • listener.security.protocol.map:指定每个监听器的安全协议。

    • log.dirs:设置 Kafka 存储日志的位置。

步骤 3:格式化存储目录

在 KRaft 模式下,Kafka 需要对存储目录进行格式化,以初始化集群元数据。执行以下命令来格式化存储目录:

kafka-storage format --config /opt/homebrew/etc/kafka/server.properties --cluster-id $(kafka-storage random-uuid)

解释

  • kafka-storage format:格式化 Kafka 存储目录。

  • --config:指定 Kafka 的配置文件。

  • --cluster-id $(kafka-storage random-uuid):生成一个新的集群 ID,用于唯一标识 Kafka 集群。

步骤 4:启动 Kafka(后台模式)

完成配置和格式化之后,可以启动 Kafka 服务并使其在后台运行:

kafka-server-start /opt/homebrew/etc/kafka/server.properties &

解释

  • kafka-server-start:启动 Kafka 服务器。

  • &:使 Kafka 在后台运行,这样你可以继续使用当前的终端会话。

步骤 5:测试 Kafka

启动 Kafka 后,可以通过以下步骤验证 Kafka 是否正常运行。

  1. 创建主题

    kafka-topics --create --topic my-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

    解释

    • --topic my-topic:指定主题名称为 my-topic

    • --bootstrap-server localhost:9092:指定 Kafka broker 的地址。

    • --partitions 1--replication-factor 1:设置主题有 1 个分区和 1 个副本。

  2. 发送消息到主题

    kafka-console-producer --topic my-topic --bootstrap-server localhost:9092

    启动后,可以在终端中输入消息,每输入一条消息按一次回车,消息就会被发送到 Kafka。

  3. 消费消息

    kafka-console-consumer --topic my-topic --bootstrap-server localhost:9092 --from-beginning

    解释

    • --from-beginning:指定从主题的起始位置开始消费。

步骤 6:停止 Kafka

如果需要停止 Kafka,可以查找 Kafka 的进程 ID 并终止它。

  1. 查找 Kafka 的进程 ID

    ps -ef | grep kafka
  2. 停止 Kafka

    假设 Kafka 的进程 ID 是 12345,可以使用以下命令来停止它:

    kill 12345

    或者更友好地停止:

    kill -TERM 12345

总结

通过以上步骤,你可以在 macOS 上使用 JDK 17 安装和配置 Kafka 的最新版本并使其在 KRaft 模式下运行。KRaft 模式使 Kafka 更加简化,无需再依赖 ZooKeeper,从而提升系统的易用性和可靠性。如果你按照本文的步骤操作,相信你可以顺利完成 Kafka 的安装和配置!

如果有任何问题或遇到困难,欢迎在评论区留言交流。

License:  CC BY 4.0