linux—如何连续地向kafka提供嗅探到的数据包?

jexiocij  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(579)

目前,我正在从本地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,但是我找不到任何有用的文档来实现这样的东西。
实现这样的事情最好的方法是什么?
谢谢!

nwnhqdif

nwnhqdif1#

使用netcat
无需编写服务器,您可以使用netcat(并告诉您的脚本侦听标准输入):

shell1> nc -l 8888 | ./producer.sh
shell2> sudo tshark -l | nc 127.1 8888

这个 -l 的tshark防止它缓冲过多的输出(在每个数据包之后刷新)。
使用命名管道
还可以使用命名管道将tshark输出传输到第二个进程:

shell1> mkfifo /tmp/tsharkpipe
shell1> tail -f -c +0 /tmp/tsharkpipe | ./producer.sh
shell2> sudo tshark -l > /tmp/tsharkpipe
uyto3xhc

uyto3xhc2#

我想你也可以
创建一个微型服务器,连接到kafkaant监听端口
使用kafka文件连接器并将所有数据附加到该文件中。http://kafka.apache.org/documentation.html#quickstart_kafkaconnect

vaj7vani

vaj7vani3#

如果使用node,则可以使用 child_process 以及 kafka_node 去做吧。像这样:

var kafka = require('kafka-node');
var client = new kafka.Client('localhost:2181');
var producer = new kafka.Producer(client);

var spawn = require('child_process').spawn;
var tshark = spawn('sudo', ['/usr/sbin/tshark']);

tshark.stdout.on('data', (data) => {
  producer.send([
    {topic: 'spark-kafka', messages: [data.split("\n")]}
  ], (err,result) => { console.log("sent to kafka")});
});
0s7z1bwu

0s7z1bwu4#

另一种选择是使用apachenifi。使用nifi,您可以执行命令并将输出传递给其他块进行进一步处理。在这里,您可以让nifi在本地主机上执行tshark命令,然后将输出传递给kafka。
这里有一个例子,应该更详细地说明这种方法。

相关问题