【问题标题】:What is the best practice for naming kafka topics?命名kafka主题的最佳实践是什么?
【发布时间】:2017-09-29 07:25:20
【问题描述】:

我们是 kafka 的新手,我们有几个团队正在开发一些相互发布/订阅事件的应用程序。由于 kafka 主题名称将在团队之间共享,是否有任何命名的最佳实践?

基本上我们不希望看到团队 A 以完全不同的方式命名一个主题 companyname-appname-events 而团队 B 命名另一个主题 productname_functionB

欢迎提出任何建议!

请注意,这听起来可能更像是以下问题: What should be naming convention of topic and partition of Kafka? 但是,那里的作者提出了更具体的问题。

【问题讨论】:

    标签: apache-kafka naming-conventions


    【解决方案1】:

    https://riccomini.name/how-paint-bike-shed-kafka-topic-naming-conventions 帮助我们回答了同样的问题。

    作为总结,本文建议遵循类似的最佳实践来命名数据库和表,并提供以下额外建议:

    1. 避免根据变化的事物命名主题
    2. 避免基于将存储在其他地方的信息的主题名称
    3. 避免基于计划的消费者/生产者的主题名称。这本质上是第一个建议的特例:D。
    4. 尽早决定套管,并考虑强制执行或至少检查/监控它。这样您可以及早发现违规者。

    【讨论】:

    • 消息类型应该说明消息的结构。 (log) 表示相对较小的消息,具有很大的活力和一些稳定的元数据。 (queue) 表示稳定的元数据,它是正在进行的集合中的众多元数据之一。
    • 我看到有人建议在主题中添加动词。根据发布的链接,我只想澄清一下:我们不应该这样做吗?例如,如果我们删除一个联系人,我们应该在主题queue.address_book.contact 上发布数据中的取消,例如{ change: 'deleted', other: 'data' }。我们应该避免像queue.address_book.contact.deleted 这样的话题吗?
    • 我想有人会说“如果它在你的世界中有意义,也许?”。但通常主题会被一个实体消费,感觉比在同一个主题中描述该实体的所有事件更有用。您可能想要使用单个主题的一个重要原因是:当它们在同一个主题(和分区!)中时,您只能依赖通过偏移的事件顺序。将需要相对排序的事件拆分为不同的主题意味着您需要找到一种明确排序的方法:)
    • @ahong 我同意@ankon,在这种情况下您应该使用单个主题。另一个原因是事件实现类通常按层次结构组织。所以,你可以有一个ContactEvent,它是ContactAddedEventContactDeletedEvent等的超类。
    • 我对博客文章中使用应用程序名称不太满意。从架构的角度来看,您应该避免通过应用程序名称耦合到应用程序。这在项目开始时可能不是问题。但是软件会被替换、扩展等等……在某个时候……如果不是每个应用程序都必须因为新的主题名称而在之后进行修改,这真的很有帮助。
    【解决方案2】:

    我想为上述答案提供一种替代方法,到目前为止,该方法在实践中运行良好,并且不会与产品或应用程序名称产生任何耦合。

    我的建议:

    1. 使用业务域和子域,例如:

      public.sales.ecommerce.shoppingcarts

      private.risk.portfolio.analysis.loans.csvimport

    2. 此外,域内部主题可以标记为“private”或外部主题(例如,在质量保证之后)标记为“public”。 另一个例子:

      private.risk.portfolio.pricingengine.assetpricing

    域和子域的数量以及是否需要将流标记为公共或私有显然取决于您组织的规模。与往常一样,应避免过度设计。

    我写了一个blog post "Topic naming conventions: How do I name my topics? 5 recommendations with examples",其中包含更多细节。

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2011-06-07
      • 1970-01-01
      • 2011-08-09
      • 2016-11-13
      相关资源
      最近更新 更多