如何将一个Kafka主题拆分为多个较小的Kafka主题?

时间:2018-07-27 18:06:45

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用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