2016-08-24 288 views
1

我有以下用例: 来自单个数据源的日志文件被推送到Kafka主题(说主题1)。 有消费者会从中读取并转换为json格式并回写到另一个主题(主题2)。 另一位期望json中的数据的消费者将从Topic 2中读取数据,并进行其他修改并回写到另一个Topic(Topic 3)中。在Kafka中,是否可以创建单个kafka主题并让多个生产者写入它

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

+1

你的方法有什么问题。我强烈建议不要在主题内混合不同的消息类型 – TobiSH

+0

@TobiSH以目前的方法,我将不得不创建很多主题,我只是担心维护太多的主题,并且在某个时间点,很少有主题会死可能会暂时使用。 – AnswerSeeker

回答

1

正如有人已经评论过的,不应该将不同类型的模式推送到单个主题。卡夫卡的主题数量不是问题。您可以使用一些术语来管理它们。如“topic1”,“topic1_json”,“topic1_modification”。

如果你的使用情况有主题的难以管理的名单,同时消费者可以读取所有JSON主题&你不想在目标文件系统相同的架构事件的配料。那么你可以按照下面的方法。

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

+0

谢谢你的回答。 +1用于融合模式注册表。我会尝试解决方案。 – AnswerSeeker

相关问题