目前,我正在从本地wlan接口嗅探数据包,如: sudo tshark > sampleData.pcap
但是,我需要把这些数据提供给Kafka。
目前,我有一个Kafka制片人脚本 producer.sh
:
../bin/kafka-console-producer.sh --broker-list localhost:9092 --topic 'spark-kafka'
像这样把数据传给Kafka: producer.sh < sampleData.pcap
在sampledata.pcap中,我预先捕获了ip数据包信息。
但是,我想自动化这个过程,就像这样:
sudo tshark > http://localhost:9091
producer.sh < http://localhost:9091
这显然只是一个伪算法。我想做的是,发送嗅探数据到一个端口,并让Kafka不断读取它。我不希望kafka连续地从一个文件中读取数据,因为这意味着从单个文件执行大量的读/写操作会导致效率低下。
我在网上搜索了一下,发现了kafkaconnect,但是我找不到任何有用的文档来实现这样的东西。
实现这样的事情最好的方法是什么?
谢谢!
4条答案
按热度按时间nwnhqdif1#
使用netcat
无需编写服务器,您可以使用netcat(并告诉您的脚本侦听标准输入):
这个
-l
的tshark防止它缓冲过多的输出(在每个数据包之后刷新)。使用命名管道
还可以使用命名管道将tshark输出传输到第二个进程:
uyto3xhc2#
我想你也可以
创建一个微型服务器,连接到kafkaant监听端口
使用kafka文件连接器并将所有数据附加到该文件中。http://kafka.apache.org/documentation.html#quickstart_kafkaconnect
vaj7vani3#
如果使用node,则可以使用
child_process
以及kafka_node
去做吧。像这样:0s7z1bwu4#
另一种选择是使用apachenifi。使用nifi,您可以执行命令并将输出传递给其他块进行进一步处理。在这里,您可以让nifi在本地主机上执行tshark命令,然后将输出传递给kafka。
这里有一个例子,应该更详细地说明这种方法。