Kafka Streams汇总指标数据

时间:2019-01-21 19:22:57

标签: java apache-kafka aggregate apache-kafka-streams

该应用程序在Kafka主题“原始指标”中收集了数千个指标。以原始格式存储它们并获取要在UI中显示的内容会占用大量资源且速度很慢。我想汇总每个指标,并每小时/每天计算“平均,总和,最小值,最大值,平均值,中位数,方差”等,并将汇总值存储在数据库中。

应用程序使用Kafka v1.1,并尝试了解Kafka流是否对您有帮助。

  

输入指标流-

时间戳:t1    metricID:m1    metricName:HTTPRequest    metricValue:10

时间戳:t1    metricID:m2    metricName:HTTPResponse    metricValue:9

时间戳:t2    metricID:m1    metricName:HTTPRequest    metricValue:20

  

预期输出-   公制|时间戳记|中位数|总和|平均|差异|均值


HTTPRequest 2019-01-01 05:30:00 + 0530到2019-01-01 06:30:00 + 0530 X Y Z Q

HTTPRequest 2019-01-01 05:30:00 + 0530到2019-01-01 06:30:00 + 0530 X Y Z Q

  

这是我的方法-

  1. 以流的形式阅读“原始指标”主题供稿
  2. 使用一小时的翻滚窗口
  3. 汇总指标并计算所需的汇总值
  4. 流到“汇总” kafka主题
metricStream
                .filter((k, v) -> (MetricFilter::Validate))
                .map((k, v) -> new KeyValue<>(v.metricID, v))
                .through(stringSerde, metricStreamSerde, "topic.metric.output")
                .groupBy((k, v) -> k, stringSerde, metricStreamSerde)
                .aggregate(MetricStreamCollector::new, (k, v, MetricStreamCollector) -> MetricStreamCollector.add(v),
                        TimeWindows.of(1 * 60 * 1000).until(60000L), collectorSerde,
                        "topic.metric.aggregation")
                .to(windowedSerde, collectorSerde, new MetricStreamPartitioner(), "topic.metric.rollup"));

请帮助我理解以下内容-

  1. 如何处理异常(如果有)?例如,如果聚合引发异常怎么办?
  2. 如何计算此拓扑中每个指标的汇总,如平均值,上四分位数,中位数和方差?

谢谢。

0 个答案:

没有答案
相关问题