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

Far*_*way 12 naming-conventions apache-kafka

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

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

任何建议表示赞赏!

请注意,这可能听起来更像是下面的问题: 什么应该是Kafka的主题和分区的命名约定? 然而,作者在那里问了一些更具体的问题.

Rey*_*anx 9

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

我的建议:

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

    public.sales.ecommerce.shoppingcarts

    private.risk.portfolio.analysis.loans.csvimport

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

    private.risk.portfolio.pricingengine.assetpricing

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

我写了一篇博文“主题命名约定:如何命名我的主题?5 个带有示例的建议”,其中介绍了更多详细信息。


ank*_*kon 8

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

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

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

  • 我猜一个人可能会说:“如果在您的世界中说得通,也许?”。但是通常情况下,主题将由实体使用,与在主题中包含描述该实体的所有事件相比,这会更有用。有一个重要原因可能要使用单个主题:当事件位于同一个主题(和分区!)中时,只能依靠偏移事件的顺序。将某种程度上需要相对排序的事件拆分为不同的主题,这意味着您需要找到一种方法来明确地将它们排序:) (2认同)