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

fafcakar  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(633)

我在到台机器(机器#1和机器#2)之间设置了kafka群集,配置如下:
1) 每台机器配置为运行一个代理和一个zookeeper。2) 服务器和zookeeper属性配置为具有多代理、多节点zookeeper。
我目前对Kafka制作人和Kafka消费者有以下了解:
1) 如果我从 machine#1machine#2 ,使用一些默认分隔符(lf或\n)将其分解为行。2) 因此,如果machine#1将两个不同的文件发布到同一主题,这并不意味着 machine#2 将接收两个文件。相反,每一行都将附加到主题日志分区和 machine#2 将按到达顺序从日志分区中读取它。i、 e.顺序不同于

file1-line1
file1-line2
end-of-file1
file2-line1
file2-line2
end-of-file2

但可能是这样的:file1-line1 file2-line1 file1-line2 end-of-file1 file-2-line2 end-of-file2
假设以上是正确的(我很高兴错了),我认为简单的生产者-消费者使用传输文件不是正确的方法(这里可能是connectapi解决方案)。由于kafka网站上说“日志聚合”是一个非常流行的用例,我想知道是否有人有任何示例项目或网站来演示使用kafka的文件交换示例。
p、 我知道这一点 Connect API 说这是为了Kafka和“其他”系统之间可靠的数据交换——但我不明白为什么其他系统不能有Kafka。所以我希望我的问题不必集中在“其他”非Kafka体系上。

b4wnujal

b4wnujal1#

您的理解是正确的,但是,如果您想要相同的顺序,您可以只使用一个分区的主题。因此,machine#2读取的顺序将与您发送的顺序相同。然而,这将是低效的,将缺乏并行Kafka是广泛使用的。
Kafka在分区内有订购保证。引用文件
kafka只提供分区内记录的总顺序,而不是主题中不同分区之间的顺序
为了将文件中的所有行只发送到一个分区,请向producer客户机发送一个额外的密钥,该客户机将把发送的消息散列到同一分区。这将确保您在计算机2上以相同的顺序从一个文件接收事件。如果您有任何问题,请随时提问,因为我们使用kafka来订购从生产中的多个来源生成的事件,这基本上也是您的用例。

相关问题