在使用 Kafka 3.4.0 并且用 Kraft (Kafka Raft) 替代 Zookeeper 的情况下,步骤会有一些变化。这是因为 Kraft 模式下 Kafka 自身管理元数据,而不再依赖 Zookeeper。
以下是使用 Kraft 模式的 Kafka 3.4.0 创建 topic 并进行生产和消费测试的具体步骤:
### 1. **启动 Kafka 集群**
确保你的 Kafka 集群已经正确配置并启动。在 Kraft 模式下,你需要启动控制器节点和代理节点。
启动控制器节点:
```sh
bin/kafka-storage.sh format -t <uuid> -c config/kraft-controller.properties
bin/kafka-server-start.sh config/kraft-controller.properties
```
启动代理节点:
```sh
bin/kafka-storage.sh format -t <uuid> -c config/kraft-broker.properties
bin/kafka-server-start.sh config/kraft-broker.properties
```
注意:`<uuid>` 是你生成的一个唯一标识符,可以使用 `uuidgen` 工具生成,例如 `uuidgen`。
### 2. **创建一个 Topic**
使用 `kafka-topics.sh` 脚本来创建一个新的 topic。例如,创建一个名为 `test-topic` 的 topic:
```sh
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
```
你可以用以下命令查看你创建的 topic 是否存在:
```sh
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
```
### 3. **启动生产者**
使用 `kafka-console-producer.sh` 启动一个命令行生产者来向 `test-topic` 发送消息:
```sh
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
```
输入一些消息,例如:
```sh
Hello, Kafka!
This is a test message.
```
### 4. **启动消费者**
使用 `kafka-console-consumer.sh` 启动一个命令行消费者来从 `test-topic` 消费消息:
```sh
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
```
这样你应该就能看到之前生产的消息被消费者接收到并打印在控制台上。
### 注意事项
1. **配置文件**:确保你的控制器和代理配置文件 (`kraft-controller.properties` 和 `kraft-broker.properties`) 已正确配置,并包含必要的配置项,如 `process.roles=controller,broker`、`controller.quorum.voters` 等。
2. **环境变量**:确保你的环境变量 `KAFKA_HOME` 已正确设置,并且 Kafka 的 `bin` 目录已添加到 `PATH` 中。如果没有,可以通过以下命令临时设置:
```sh
export KAFKA_HOME=/path/to/kafka
export PATH=$PATH:$KAFKA_HOME/bin
```
3. **工具版本**:确保使用与 Kafka 版本一致的命令行工具(例如 `kafka-topics.sh`, `kafka-console-producer.sh`, `kafka-console-consumer.sh`)。
通过以上步骤,你应该能够在 Kraft 模式下成功地创建一个 Kafka topic,并测试生产者和消费者的功能。如果遇到任何问题,请检查 Kafka 的日志文件以获取更多信息。