Apache kafka 使用Kafka在两个客户端之间传输文件

Apache kafka 使用Kafka在两个客户端之间传输文件,apache-kafka,kafka-consumer-api,kafka-producer-api,apache-kafka-connect,Apache Kafka,Kafka Consumer Api,Kafka Producer Api,Apache Kafka Connect,我在到机器(机器1和机器2)之间设置了kafka群集,配置如下: 1) 每台机器配置为运行一个代理和一个zookeeper。 2) 服务器和zookeeper属性配置为具有多代理、多节点zookeeper 我目前对卡夫卡制作人和卡夫卡消费者有以下理解: 1) 如果我将文件从machine#1发送到machine#2,它将使用一些默认分隔符(LF或\n)按行分解。 2) 因此,如果machine#1将两个不同的文件发布到同一主题,这并不意味着machine#2将接收这两个文件。相反,每一行都将附加

我在到机器(机器1和机器2)之间设置了kafka群集,配置如下:

1) 每台机器配置为运行一个代理和一个zookeeper。 2) 服务器和zookeeper属性配置为具有多代理、多节点zookeeper

我目前对卡夫卡制作人和卡夫卡消费者有以下理解:

1) 如果我将文件从
machine#1
发送到
machine#2
,它将使用一些默认分隔符(LF或\n)按行分解。 2) 因此,如果machine#1将两个不同的文件发布到同一主题,这并不意味着
machine#2
将接收这两个文件。相反,每一行都将附加到主题日志分区中,并且
机器2
将按照到达顺序从日志分区中读取它。i、 e.订单与订单不同

file1-line1
file1-line2
end-of-file1
file2-line1
file2-line2
end-of-file2
但可能是这样的: 文件1-line1 文件2-line1 文件1-line2 文件结尾1 文件2-line2 文件结尾2

假设上面的说法是正确的(我很高兴我错了),我相信简单的生产者-消费者使用传输文件的方法是不正确的(这里的解决方案可能是connectapi)。由于Kafka网站说“日志聚合”是一个非常流行的用例,我想知道是否有人有任何使用Kafka演示文件交换示例的示例项目或网站


p.S.我知道,根据定义
Connect API
说,这是为了卡夫卡和“其他”系统之间可靠的数据交换——但我不明白为什么其他系统不能有卡夫卡。所以我希望我的问题不必集中在“其他”非卡夫卡系统上。

你的理解是正确的,但是如果你想要相同的顺序,你可以只使用一个分区来讨论这个主题。 因此,机器2读取的顺序将与您发送的顺序相同。 然而,这将是低效的,并且缺乏卡夫卡广泛使用的并行性

卡夫卡在分区内有订购保证。引用文件

Kafka只提供分区内记录的总顺序,而不是 在主题中的不同分区之间

为了将一个文件中的所有行只发送到一个分区,请向producer客户端发送一个附加密钥,该密钥将把发送的消息散列到同一分区。
这将确保您在机器#2上以相同的顺序从一个文件接收事件。如果您有任何问题,请随时提问,因为我们使用Kafka来订购从生产中的多个来源生成的事件,这基本上也是您的用例。

非常感谢。我实际上在做一个PoC,它可能会导致从一个卡夫卡制作人(
machine#1
)向其他人传输文件,反之亦然。你是说我必须使用连接器API?或者我需要改用流吗?@ha9u63ar如果是双向传输,您必须运行与连接到kafka群集的生产者和消费者相同的实例。您也可以使用连接器或简单的生产者/消费者客户端