kafka-console-producer.sh
是 Kafka 提供的一个命令行工具,用于向 Kafka 主题发送消息(即生产消息)。它允许你在终端中手动输入消息,或从文件、其他命令的输出中读取消息并发送到 Kafka。
以下是使用 kafka-console-producer.sh
的基本命令格式:
bin/kafka-console-producer.sh --bootstrap-server <broker地址> --topic <主题名>
--bootstrap-server
: 指定 Kafka broker 的地址(例如 localhost:9092
),用于建立初始连接。--topic
: 指定要发送消息的主题名称。--property
: 设置额外的生产者配置,例如:
parse.key=true
: 启用键值对模式(需要配合 key.separator
使用)。key.separator=,
: 指定键和值之间的分隔符(默认为制表符 \t
)。--producer.config
: 指定生产者配置文件的路径。--request-required-acks
用于控制生产者发送消息后需要等待多少个副本确认接收,以此来平衡消息发送的可靠性和性能。这个参数会影响消息的持久性保证和发送延迟。该参数指定了生产者在认定消息发送成功之前需要收到的确认数(acks)。主要有以下几种取值:
启动生产者并手动输入消息:
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
输入消息后按回车键发送,输入 Ctrl + D
退出。
使用键值对模式(键和值用逗号分隔):
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic \
--property "parse.key=true" \
--property "key.separator=,"
输入格式示例:
key1,value1
key2,value2
将文件内容作为消息发送:
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic < messages.txt
结合其他命令生成消息:
# 发送 1 到 100 的数字作为消息
seq 1 100 | bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
指定生产者配置文件(例如包含安全认证信息):
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic \
--producer.config /path/to/producer.properties
producer.properties
示例内容:
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="your_username" \
password="your_password";
auto.create.topics.enable
是否为 true
(默认是),或手动创建主题。kafka-console-consumer.sh
是 Kafka 提供的命令行工具,用于从 Kafka 主题消费(读取)消息。它支持多种消费模式,适合快速测试、调试或数据导出等场景。
以下是常用的命令格式:
bin/kafka-console-consumer.sh --bootstrap-server <broker地址> --topic <主题名> [其他参数]
参数 | 作用 |
---|---|
--bootstrap-server |
指定 Kafka broker 地址(如 localhost:9092 ) |
--topic |
指定要消费的主题名 |
--group |
指定消费组 ID(默认自动生成临时组) |
--from-beginning |
从主题的最早消息开始消费 |
--partition |
指定消费特定分区(需配合 --offset 使用) |
--offset |
指定消费起始位置(如 earliest 、latest 、具体偏移量) |
--max-messages |
指定消费的最大消息数量后退出 |
--formatter |
指定消息格式器(如 JSON 解析器) |
--property print.key=true |
打印消息的键(默认只打印值) |
--property key.separator |
指定键值分隔符(默认 \t ) |
--property print.timestamp=true |
打印消息时间戳 |
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic
test-topic
的新消息(从当前位置开始)Ctrl+C
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --group my-group
my-group
消费组,实现消息负载均衡bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --partition 0 --offset earliest
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic \
--property print.key=true \
--property print.timestamp=true \
--property key.separator=":"
[2023-10-01T12:00:00,000] key1:value1
[2023-10-01T12:00:01,000] key2:value2
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic \
--formatter kafka.tools.DefaultMessageFormatter \
--property print.key=true \
--property print.value=true \
--property key.deserializer=org.apache.kafka.common.serialization.StringDeserializer \
--property value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning > messages.txt
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --max-messages 100