kafka-console-producer和bash脚本

sca*_*ala 16 bash apache-kafka

想通过bash脚本发送一些消息.

  bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper.log 2>&1 &
sleep 2

bin/kafka-server-start.sh config/server.properties > server.log 2>&1 &
sleep 2

#Create topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic $1
sleep 2

#Get topics list
echo "kafka has next topics:"
bin/kafka-topics.sh --list --zookeeper localhost:2181

#send message
echo "will send messages:"
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic $1 "test 1"
Run Code Online (Sandbox Code Playgroud)

卡夫卡开局不错.我可以通过制作人控制台发送消息

 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic $1 "test 1"
Run Code Online (Sandbox Code Playgroud)

但我不能发送消息到bash脚本.如何通过bash脚本发送它?

谢谢.

ser*_*jja 19

试着这样做:

echo "test 1" | bin/kafka-console-producer.sh --broker-list localhost:9092 --topic $1
Run Code Online (Sandbox Code Playgroud)

或这个:

cat file.txt | bin/kafka-console-producer.sh --broker-list localhost:9092 --topic $1
Run Code Online (Sandbox Code Playgroud)

  • 对于连续输入(即,如果某些其他进程写入文件),您可以使用:`tail -n +1 -f file.txt | bin/kafka-console-producer.sh --broker-list localhost:9092 --topic $ 1` (5认同)

小智 7

您也可以执行以下操作。忽略睡眠参数。

for x in {1..100}; do echo $x; sleep 2; done | path/to/bin/kafka-console-producer --broker-list <brk:port> --topic <topic_name>
Run Code Online (Sandbox Code Playgroud)


小智 5

这也适用:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic "my-topic" < file.txt


小智 5

这可能对某些人有帮助。我尝试运行 @sereija 的答案,其中生成的消息是以下形式的 JSON:

{"value_1":"name", "value_2":"preferred programming language"}, 
Run Code Online (Sandbox Code Playgroud)

并且解析没有正确执行。当要发布到队列中的消息包含字符串时,您需要使用反斜杠\来执行@sereija的答案。准确地说,我的代码的工作原理如下:

echo {\"value_1\":\"name\", \"value_2\":\"preferred programming language\"} | bin/kafka-console-producer.sh --broker-list localhost:9092 --topic <topic-name>
Run Code Online (Sandbox Code Playgroud)