第 4 章 发出和读到第一条消息
创建单分区主题
在新的终端,进入 Kafka 解压目录,执行:
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic hello-kafka \
--partitions 1 --replication-factor 1预期看到 Created topic hello-kafka.。若提示已经存在,可以继续使用;本章的消息数预期以第一次创建的空主题为准。
查看它:
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--describe --topic hello-kafka重点找 PartitionCount: 1 和 ReplicationFactor: 1。Leader、Replicas、Isr 后面的数字是节点编号,不是消息数量。
写入三行
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 \
--topic hello-kafka进入交互界面后,输入下面三行,每行后回车:
你好,Kafka
这是第二条消息
订单 A1001 已创建
每一行是一条独立记录。命令不会自动把多行 JSON 合成一条消息。按 Ctrl+C 退出生产者,Broker 仍然保持运行。
从头读取
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--topic hello-kafka --from-beginning \
--group hello-readers第一次使用这个组,应读到刚才三行,然后持续等待新消息。等待不是卡死。打开另一个生产者再输入一行,你会看到消费者很快显示它。
消费不会把记录从主题里删掉。停止消费者,再换一个从未使用过的组,比如 hello-readers-2,仍可以从头读取保留着的消息。
为什么重启后没有从头显示
--from-beginning 并不是“强行覆盖已有消费进度”。在没有有效已提交进度时,它让消费者从最早的可用位置开始。已有组通常从保存的进度继续。需要从头演示时,最简单的方法是换一个新组;正式重放需要有计划地重置进度。
本章检查点:你应当能看到消息;能解释主题不会因消费而清空;能区分“新组从头读”和“旧组继续读”。