我在kafka主题中有delta
个数字流,需要以特殊方式进行汇总,即:
aggregate[0] = 0
aggregate[N] = aggregate[N-1] * (N - 1) / N + delta[N - 1] / N
(确切的公式无关紧要,但是请注意对aggregate
中前一个元素的依赖)
基本上,我需要同时订阅两个kafka主题,同时我同时推进两个主题:当我读到delta
主题中的项目时,我需要从中读取相应的项目也使用aggregate
主题,然后在aggregate
主题中的下一项被消耗之前,将结果写到delta
主题中。
这在卡夫卡有可能吗?聪明的ksql可以帮忙吗?
答案 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是一个完美的解决方案