【问题标题】:In Kafka, can I create a single kafka topic and have multiple producers write to it在 Kafka 中,我可以创建一个单独的 kafka 主题并让多个生产者写入它吗
【发布时间】:2016-12-31 04:08:54
【问题描述】:

我有以下用例: 来自单个数据源的日志文件被推送到 Kafka 主题(比如主题 1)。 有一个消费者将从它读取并转换为 json 格式并写回另一个主题(主题 2)。 另一个期望 json 数据的消费者将从主题 2 中读取数据,然后进行一些其他修改并写回另一个主题(主题 3)。

我的问题不是创建 3 个不同的主题,我可以创建一个主题并让这些多个生产者写入同一个主题吗?由于无法为生产者设置组 ID,我的消费者如何知道要从哪个分区读取? 我从 SO 中学到的一个解决方案是创建分区并让每个生产者单独写入特定分区。这种方法的问题是生产者和消费者的数量可能会改变,并且不希望修改主题。请指教。

【问题讨论】:

  • 你的方法有什么问题。我强烈建议不要在一个主题中混合使用不同的消息类型
  • @TobiSH 使用当前的方法,我将不得不创建很多主题,我只是担心维护太多主题,并且在某个时间点,很少有主题会因为可能暂时被使用而死掉。

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


【解决方案1】:

正如一些人已经评论的那样,您不应该将不同类型的架构推送到单个主题。 Kafka 中的主题数量不是问题。您可以使用一些命名法来管理它们。像“topic1”、“topic1_json”、“topic1_modification”。

如果您的用例有无法管理的主题列表,则同一使用者可以读取所有 json 主题,并且您不希望在目标文件系统中批处理相同的模式事件。然后你可以按照下面的方法。

使用通用架构创建一个对象或设置一些架构注册表(检查confluent schema registry)。您的所有模式都适合作为 subRecord OR 记录的地方将携带模式信息。然后为所有 json 响应创建一个主题(例如:topic_json_generic)。从“topic1”读取数据后,将其推送到“topic_json_generic”。类似的进一步主题。在消费者级别,您可以处理需要处理哪种类型的对象。

【讨论】:

  • 感谢您的回答。 +1 用于融合模式注册表。我会尝试那个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2022-01-06
  • 2020-06-25
  • 1970-01-01
  • 2020-06-03
  • 2020-10-12
相关资源
最近更新 更多