kafka增量聚合

时间:2019-10-28 12:57:56

标签: apache-kafka ksql

我在kafka主题中有delta个数字流,需要以特殊方式进行汇总,即:

aggregate[0] = 0
aggregate[N] = aggregate[N-1] * (N - 1) / N + delta[N - 1] / N

(确切的公式无关紧要,但是请注意对aggregate中前一个元素的依赖)

基本上,我需要同时订阅两个kafka主题,同时我同时推进两个主题:当我读到delta主题中的项目时,我需要从中读取相应的项目也使用aggregate主题,然后在aggregate主题中的下一项被消耗之前,将结果写到delta主题中。

这在卡夫卡有可能吗?聪明的ksql可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我想知道我的伪代码是否可以提供帮助。 假设有两个主题,“增量”和“聚合”。 并且两个主题的分区均为1以简化情况(以便我们获得全局顺序)

# this is just pseudocode to show my thoughts
def demo():
    delta_consumer = Consumer("delta")
    aggregate_consumer = Consumer("aggregate")
    aggregate_producer = Producer("aggregate")

    is_pre_aggregate_result_exists = aggregate_consumer.get_offset() != 0 # check whether it's first running 
    for delta_data in delta_consumer.poll():
        if not is_pre_aggregate_result_exists:
            last_aggregate_result = 0
        else:
            last_aggregate_result = aggregate_consumer.get_last_record()
        new_aggregate_result = user_define_function(delta_data, last_aggregate_result)
        aggregate_producer.producer(new_aggregate_result)
        is_pre_aggregate_result_exists = True

同时,我想kafka + structurd-steaming可以解决您的问题,因为您的问题的内部需求是在流表上获取aggregate_result,然后将结果输出到kafka主题,其中kafka + structured-steraming是一个完美的解决方案