【问题标题】:Is it possible to get top 10 from ktable\kstream?是否有可能从 ktable\kstream 获得前 10 名?
【发布时间】:2021-09-23 17:49:52
【问题描述】:

我有一个带有String 键的主题,它是一个信号类型,Signal 值是这样的一个类

public clas Signal {
  public final int deviceId;
  public final int value;
  ...
}

每个设备都可以发送随时间上升或下降的信号值,没有规律。

是否有可能将每种类型(主题的关键)在所有时间段内最大信号 value 的前 10 台设备作为 KTable<String,Signal>?如果所有信号值都在上升,会有帮助吗?

如果需要,可以更改主题结构。

【问题讨论】:

    标签: apache-kafka-streams


    【解决方案1】:

    例如,对于值总是在提高的情况,可以使用 Kafka Streams。需要创建自己的 Top10 聚合到前 10 名的商店并在 add 调用时更新它

        final var builder = new StreamsBuilder();
        final var topTable = builder
            .table(
                SignalChange.TOPIC_NAME,
                Consumed.with(Serdes.String(), new SignalChange.Serde())
            ).toStream()
            .groupByKey()
            .aggregate(
                () -> new Top10(),
                (k, v, top10) -> top10.add(v),
                Materialized.with(Serdes.String(), new Top10.Serde())
            );
    

    topTable 然后可以加入任何请求顶部的流

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多