【问题标题】:Using Kafka to Transfer Files between two clients使用 Kafka 在两个客户端之间传输文件
【发布时间】:2017-10-27 10:43:33
【问题描述】:

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

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

我目前对KafkaProducer和KafkaConsumer的理解如下:

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

不同
file1-line1
file1-line2
end-of-file1
file2-line1
file2-line2
end-of-file2

但它可能是这样的: 文件 1 行 1 文件 2 行 1 文件 1 行 2 文件结束1 文件 2 行 2 文件结束2

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

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

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-connect


    【解决方案1】:

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

    Kafka 在分区内具有排序保证。引用文档

    Kafka 仅提供分区内记录的总排序,不提供 在一个主题的不同分区之间

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

    【讨论】:

    • 非常感谢。我实际上正在研究一个 PoC,这可能会导致将文件从一个 kafka 生产者 (machine#1) 传输到其他人,反之亦然。所以你是说我必须使用连接器 API?还是我需要改用 Stream?
    • @ha9u63ar 如果是双向传输,您必须运行与连接到 kafka 集群的生产者和消费者相同的实例。您也可以使用连接器或简单的生产者/消费者客户端
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多