【问题标题】:How to split one Kafka topic into multiple smaller Kafka topics?如何将一个 Kafka 主题拆分为多个较小的 Kafka 主题?
【发布时间】:2019-01-04 21:30:27
【问题描述】:

我有一个主要的 Kafka 主题,它接收一些时间序列数据。我需要获取该主题中的每个值,复制它,然后根据其键中的值将其发送到许多单独的主题之一。由于它是时间序列数据,因此每个条目的值都有一个时间戳。我如何才能完成这种拆分,同时确保推送到单独主题中的值不会在时间戳方面出现乱序?

【问题讨论】:

  • 你见过这个例子吗? github.com/confluentinc/kafka-streams-examples/blob/4.1.x/src/…因为这是你在做的无状态操作,我觉得很有帮助
  • 使用 Kafka Streams,您可以使用 KStream#branch() 到 KStream#toTopicNameExtractor(注意,TopicNameExtractor 是最近添加到 Kafka 2.0.0 版本中的,在旧版本中不可用版本)。
  • 使用 TopicNameExtractor 的动态主题分支几乎解决了我的问题。我遇到的问题是它需要提取的主题名称不在我正在流式传输的主题中。我有第二个主题用作查找,其中我正在流式传输的主题中的键与查找主题中的键相同。查找主题的值是包含主题名称的内容。处理主题名称在另一个主题中的动态主题分支的最佳方法是什么?

标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api


【解决方案1】:

没错。使用 kafkaStreams,您可以连续读取代理中的任何主题,使用条件处理数据(基于您在 id 中的情况)并在任何其他输出主题中写回代理。或者,要检查其中的结果,您可以从任何其他侦听器订阅这些输出主题。简单快捷。

【讨论】:

    【解决方案2】:

    您可以使用 KSQL 并通过 SQL 查询创建新主题:

    CREATE STREAM pageviews(
        viewtime BIGINT KEY,
        userid VARCHAR,
        pageid VARCHAR
      ) WITH (
        KAFKA_TOPIC='pageviews',
        VALUE_FORMAT='DELIMITED',
        PARTITIONS=4,
        REPLICAS=3
      );
    

    https://docs.ksqldb.io/en/latest/developer-guide/create-a-stream/

    或者正如@Matthias J. Sax 在 KStreams 中提到的那样: https://kafka.apache.org/23/javadoc/org/apache/kafka/streams/kstream/KStream.html

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2020-01-01
      • 1970-01-01
      • 2018-02-16
      • 2020-04-12
      • 2017-04-03
      • 2019-07-25
      • 2018-08-19
      • 2020-12-08
      相关资源
      最近更新 更多