【问题标题】:Kafka Streams Internal Topic NamingKafka Streams 内部主题命名
【发布时间】:2018-10-03 18:46:25
【问题描述】:

根据文档 (https://docs.confluent.io/current/streams/developer-guide/manage-topics.html#internal-topics),内部主题遵循命名约定 <application.id>-<operatorName>-<suffix>

我们有一些例子:

testapplication-KSTREAM-REDUCE-STATE-STORE-0000000008-repartition  
testapplication-KSTREAM-REDUCE-STATE-STORE-0000000027-repartition  

有人知道整数是如何确定的吗?

不幸的是,我们的安全要求不允许我们使用我们的应用程序创建主题,并且需要提前设置。我正在尝试确定这些主题名称是否一致。

【问题讨论】:

  • 你为什么改变你的问题?这会使现有答案无效...您应该提出一个新问题。
  • 这是一个实现细节,您不应该依赖这些名称的生成方式。在内部,它只是一个每次生成新名称时都会增加的计数器。
  • 如果这是一个问题,您还可以命名某些运营商/商店以在您的代码中设置名称。
  • 你是怎么做到的?我们正在使用 DSL api,并且看不到 reduce 操作命名主题的方法。如果您能写一个描述它的答案,那就太好了!
  • 所有有状态的操作符都有重载可以传入可选参数,如MaterializedJoined,允许指定名称:如果你能阅读文档,那就太好了:kafka.apache.org/20/javadoc/org/apache/kafka/streams/kstream/…

标签: apache-kafka apache-kafka-streams


【解决方案1】:

通常中间主题名称按照以下约定构造:

<ApplicationId>-<operator name>-<suffix>

后缀值可以是“changelog”或“repartition”

基于运算符,它使用后缀之一。这是一个例子:

testapplication-aggregate-repartition

testapplication-aggregate-changelog

【讨论】:

  • 所以我们有一些类似 testapplication-KSTREAM-REDUCE-STATE-STORE-0000000008-repartition 和 testapplication-KSTREAM-REDUCE-STATE-STORE-0000000027-repartition。这些数字从何而来?
  • 这些数字代表沿 -KSTREAM-REDUCE-STATE-STORE 的处理器节点。拓扑由多个处理器节点构建,每个节点都有唯一的 ID。所以默认的状态存储命名约定使用这些名称。
  • 通过查看那些主题名称,我可以推断出流处理的顺序吗?
【解决方案2】:

要回答您关于整数的主要问题,我在文档中找到了以下内容:

数字是一个全局递增的数字,表示 算子在拓扑中的顺序。生成的号码有前缀 使用不同数量的“0”来创建一个始终如一的字符串 10 个字符长。

这是 kafka 流 DSL 非常重要的方面,如果您更改拓扑,可能会导致一些问题。命名您的有状态运算符是一个好习惯。

您可以在dsl-topology-naming 文章中找到更多信息

【讨论】:

    【解决方案3】:

    您是否看过这些用于为 Streams 内部主题设置 ACL 的命令。我相信它们是作为 Kafka v2.x.x 的一部分引入的 (confluent doc)

       # Allow Streams to manage its own internal topics and consumer groups:
       bin/kafka-acls ... --add --allow-principal User:team1 --operation All --resource- 
       pattern-type prefixed --topic team1-streams-app1 --group team1-streams-app1
    

    所以你只需要知道steams application.id,它是所有内部主题的前缀。

    我相信您将授予所有权限,这也将允许他们创建。

    【讨论】:

      【解决方案4】:

      要回答您关于主题名称是否一致的问题,根据我的经验,它们在应用程序的执行之间是一致的,但是,如果您在逻辑中修改、添加或删除任何连接或减少的顺序,主题名称可能会改变。

      【讨论】:

        【解决方案5】:

        整数是内部生成的。

        您可以在此处找到它的文档:

        https://docs.confluent.io/current/streams/javadocs/index.html

        在 groupBy 方法描述下它说:

        因为选择了一个新的键,所以会在 Kafka 中创建一个内部重新分区主题。该主题将命名为“${applicationId}-XXX-repartition”,其中“applicationId”是用户在 StreamsConfig 中通过参数 APPLICATION_ID_CONFIG 指定的,“XXX”是内部生成的名称,而“-repartition”是固定后缀。您可以通过 Topology.describe() 检索所有生成的内部主题名称。

        【讨论】:

        • 这并不能真正回答问题。整数是内部计数器并被视为实现细节。
        • @MatthiasJ.Sax 你是对的。我知道这是一个实现细节。不幸的是,我们的安全要求不允许我们使用我们的应用程序创建主题,并且需要提前设置。我正在尝试确定这些主题名称是否一致。
        • @MatthiasJ.Sax 他编辑了原始问题,但没有询问实施细节
        • @Chris 只要不更改拓扑,名称就不会更改。你可以通过Topology#describe()知道名字。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        相关资源
        最近更新 更多