命名kafka主题的最佳实践是什么?

时间:2017-05-01 21:10:28

标签: apache-kafka naming-conventions

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

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

任何建议都表示赞赏!

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

2 个答案:

答案 0 :(得分:6)

https://medium.com/@criccomini/how-to-paint-a-bike-shed-kafka-topic-naming-conventions-1b7259790073帮助我们回答了同样的问题。

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

  1. 根据更改的内容避免使用主题名称
  2. 根据将存储在其他地方的信息避免使用主题名称
  3. 根据计划的消费者/生产者避免使用主题名称。这基本上是第一个建议的特例:D。
  4. 尽早决定套管,并考虑强制执行或至少检查/监控它。这样你就可以在早期抓住罪犯。

答案 1 :(得分:2)

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

我的建议:

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

    public.sales.ecommerce.shoppingcarts

    private.risk.portfolio.analysis.loans.csvimport

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

    private.risk.portfolio.pricingengine.assetpricing

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

我已经写了一个blog post "Topic naming conventions: How do I name my topics? 5 recommendations with examples",里面有更多的细节。