命名 kafka 主题的最佳做法是什么?

What is the best practice for naming kafka topics?

我们是 kafka 的新手,我们有几个团队在开发一些 publish/subscribe 事件 to/from 的应用程序。由于 kafka 主题名称将在团队之间共享,是否有命名的最佳实践?

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

如有任何建议,我们将不胜感激!

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

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

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

  1. 避免根据变化的事物命名主题
  2. 避免基于将存储在其他地方的信息的主题名称
  3. 根据计划避免使用主题名称 consumers/producers。这本质上是第一个建议的特例 :D.
  4. 尽早决定大小写,并考虑强制执行或至少 check/monitor。这样您就可以及早发现违规者。

我想提出上述答案的另一种方法,到目前为止在实践中效果很好,并且不会导致与产品或应用程序名称的任何耦合。

我的推荐:

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

    public.sales.ecommerce.shoppingcarts

    private.risk.portfolio.analysis.loans.csvimport

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

    private.risk.portfolio.pricingengine.assetpricing

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

我写了一篇blog post "Topic naming conventions: How do I name my topics? 5 recommendations with examples",里面有更详细的介绍。