【问题标题】:Kafka streams merging messageKafka 流合并消息
【发布时间】:2019-09-17 16:34:33
【问题描述】:

我有一个数据负载,对于一条消息来说太大了。考虑一个 avro:

record Likes {...}
record Comments {...}
record Post {
  Likes likes;
  Comments comments;
  string body;
}

假设,like 和 cmets 是大型集合,如果将它们与 post 一起传递,它将超过最大消息大小,我认为增加到 10-20 MB 是不正确的。

我想将一条消息分成三个:post body、cmets 和 likes。但是,我希望数据库插入是原子的 - 所以我想在消费者内存中对这些消息进行分组和合并。

我可以用 kafka-streams 做到这一点吗? 我可以有一个没有输出主题的流吗(因为输出消息将再次超过最大大小)。

如果您有任何想法假设相同的输入(一条超过配置的最大消息大小的大消息),请分享

【问题讨论】:

  • 请注意,如果您想进一步研究此选项,还可以增加 Kafka 允许的最大消息大小。

标签: apache-kafka apache-kafka-streams stream-processing


【解决方案1】:

是的,您可以使用 kafka-streams 来完成,合并数据存储中的消息传递,并且您可以拥有一个没有输出主题的流。您需要确保三个部分进入同一个分区(进入应用程序的同一个实例),因此它们可能具有相同的键。

您也可以为每个对象使用三个主题,然后加入它们。 (再次使用相同的键)。

但一般来说,Kafka 是为处理大量小消息而设计的,它不适用于处理大消息。或许您应该考虑在一条消息中发送的不是全部信息,而是增量更改,仅发送已更新的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多