如何通过CLI命令/脚本让Kafka生产者与消费者持续运行24小时
实现Kafka生产者/消费者持续运行24小时的方案
要验证Kafka集群弹性,你可以通过Shell循环结合Kafka官方CLI工具,实现生产者持续发消息、消费者持续消费24小时,同时保证消息尺寸最小化。以下是具体实现方式:
一、持续运行24小时的生产者
方式1:单命令快速实现
用timeout限制运行时长,配合无限循环发送极简消息(比如10位时间戳或单个字符):
# 替换<集群地址>和<测试主题>为实际值,sleep间隔可按需调整 timeout 24h bash -c 'while true; do echo $(date +%s) | kafka-console-producer.sh --broker-list <kafka-broker1:9092,kafka-broker2:9092> --topic elastic-test-topic; sleep 0.1; done'
timeout 24h:强制进程24小时后自动终止date +%s:输出极简的时间戳(仅10个字符),保证消息尺寸最小sleep 0.1:控制发送频率,数值越小发送越频繁(根据测试压力需求调整)
方式2:Shell脚本封装(更灵活)
如果需要自定义参数或逻辑,写个可复用的脚本kafka-producer-24h.sh:
#!/bin/bash # 配置参数 BROKERS="kafka1:9092,kafka2:9092,kafka3:9092" TEST_TOPIC="elastic-test-topic" RUN_SECONDS=$((24 * 3600)) # 24小时转为秒数 SEND_INTERVAL=0.05 # 发送间隔(秒) start_time=$(date +%s) current_time=$start_time while [ $((current_time - start_time)) -lt $RUN_SECONDS ]; do # 发送单个字符,是最小的消息尺寸 echo "x" | kafka-console-producer.sh --broker-list $BROKERS --topic $TEST_TOPIC sleep $SEND_INTERVAL current_time=$(date +%s) done
赋予执行权限并运行:
chmod +x kafka-producer-24h.sh ./kafka-producer-24h.sh
二、持续运行24小时的消费者
方式1:单命令快速实现
直接启动消费者并丢弃消息(无需关注内容),用timeout控制运行时长:
# 替换<集群地址>和<测试主题>,--from-beginning可选(从头消费) timeout 24h kafka-console-consumer.sh --bootstrap-server <kafka-broker1:9092,kafka-broker2:9092> --topic elastic-test-topic --from-beginning > /dev/null
> /dev/null:将消费的消息直接丢弃,避免占用磁盘空间- 如果不需要从头消费,去掉
--from-beginning即可
方式2:Shell脚本封装
写个kafka-consumer-24h.sh脚本,通过进程管理控制运行时长:
#!/bin/bash BROKERS="kafka1:9092,kafka2:9092,kafka3:9092" TEST_TOPIC="elastic-test-topic" RUN_SECONDS=$((24 * 3600)) # 启动消费者,输出重定向到/dev/null kafka-console-consumer.sh --bootstrap-server $BROKERS --topic $TEST_TOPIC --from-beginning > /dev/null & consumer_pid=$! # 等待24小时后终止消费者 sleep $RUN_SECONDS kill $consumer_pid
运行脚本:
chmod +x kafka-consumer-24h.sh ./kafka-consumer-24h.sh
额外注意事项
- 如果Kafka的bin目录没加入环境变量,要使用完整路径(比如
/opt/kafka/bin/kafka-console-producer.sh) - 要后台运行不依赖终端,可加
nohup和&:nohup timeout 24h bash -c 'while true; do echo "x" | kafka-console-producer.sh --broker-list ... --topic ...; sleep 0.1; done' > producer.log 2>&1 & - 消费者可添加
--consumer-property enable.auto.commit=false关闭自动提交,减少资源开销
内容的提问来源于stack exchange,提问作者maverick
相关产品推荐
相关产品推荐

