【问题标题】:How to feed shell script output to kafka?如何将shell脚本输出提供给kafka?
【发布时间】:2016-05-02 19:57:34
【问题描述】:

我正在尝试将一些 netflow 数据输入 kafka。我有一些 netflow.pcap 文件,我读起来很喜欢

tcpdump -r netflow.pcap 并得到这样的输出:

14:48:40.823468 IP abts-kk-static-242.4.166.122.airtelbroadband.in.35467 > abts-kk-static-126.96.166.122.airtelbroadband.in.9500: UDP, length 1416
14:48:40.824216 IP abts-kk-static-242.4.166.122.airtelbroadband.in.35467 > abts-kk-static-126.96.166.122.airtelbroadband.in.9500: UDP, length 1416

。 . . .

在官方文档中,他们提到了启动 kafka 生产者的传统方式,启动 kafka 消费者并在终端中输入生产者的一些数据,这些数据将显示在消费者中。好的。工作。

这里 they show how to input a file to kafka producer。请注意,只有一个文件,而不是多个文件。

问题是:

如何将 shell 脚本的输出提供给 kakfa 代理?

比如shell脚本是:

#!/bin/bash
FILES=/path/to/*
for f in $FILES
do
  tcpdump -r netflow.pcap
done

我找不到任何文档或文章提到如何执行此操作。任何想法?谢谢!

【问题讨论】:

  • 如果您是生成pcap 文件的人,从现在开始,您可以将pcap 输出直接传送到控制台生产者,而不是先保存到文件。这样你就不用担心数据量了。

标签: bash shell apache-kafka pcap netflow


【解决方案1】:

好吧,根据您提供的有关如何将 shell kafka 生产者与输入文件一起使用的链接,您可以对输出执行相同操作。您可以将输出重定向到文件,然后使用生产者。

请注意,我使用>> 是为了附加到文件而不是覆盖它。

例如:

#!/bin/bash
FILES=/path/to/*
for f in $FILES
do
  tcpdump -r netflow.pcap >> /tmp/tcpdump_output.txt
done

kafka-console-produce.sh --broker-list localhost:9092 --topic my_topic
--new-producer < /tmp/tcpdump_output.txt

【讨论】:

  • 实际上,假设每个netflow.pcap 文件为1GB,并且目录中有很多这样的文件。您提供的解决方案可能不够有效。你不觉得吗?
  • 嗯,你可以将每个 tcpdump 输出到不同的文件,然后迭代输出文件并将它们生成到 kafka。否则,您可以在您的机器上安装logstash 并将其配置为从某个文件夹读取输入,假设您的所有 tcpdumps 文件所在的输出文件夹,然后将 kafka 插件安装到 logstash 并使用它将内容输出到 kafka。
  • 您能否详细说明该评论?也许一些初步步骤?
  • 您需要将logstashfile 的输入插件和kafka 的输出插件一起使用
猜你喜欢
  • 2013-04-10
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
相关资源
最近更新 更多