Kafka Streams:如何在申请重新处理之前获取偏移量限制,以及如何停止偏移量限制

时间:2019-03-15 12:44:08

标签: apache-kafka apache-kafka-streams

我正在寻找一种在KafkaStreams中进行重新处理的工具,该方法将允许从主题的开头重新处理数据(应用某些过滤器并将这些事件的更新版本写入同一主题)。同时,有一个长期运行的应用程序在处理来自该主题的数据。

为了只处理直到启动应用程序并在其后停止的时间点 ,需要知道何时停止,这是该点最新产生的偏移量。例如。可以在启动具有(分区->偏移量)知道这些限制的拓扑之前构造一个映射,因此,当达到该偏移量时,应用程序将能够停止,将当前分区和偏移量(通过Processor API)与该初始地图的偏移量限制。

是否可以在Kafka Streams中访问最新的胶印信息?还有另一种解决方法吗? (我想您可以通过常规的Kafka消费者来创建它,寻找最终目标并获得位置,但是我问KafkaStreams中是否有集成的解决方案。)

此外,如何仅在所有分区都已达到其偏移量时才轻轻停止应用程序,知道此信息已分发,因此您需要从所有实例中了解状态?

Kafka / KafkaStreams 2.1,Scala 2.12

1 个答案:

答案 0 :(得分:1)

使用消费者获得最终补偿似乎是合理的。要停止应用程序,您需要构建一个手动解决方案来跟踪进度。例如,使用self可以检查输入记录的主题名称,分区和偏移量(使用class Test { constructor(obj){ this.obj = obj } change() { var self = this Object.keys(this.obj).forEach(function (name, index) { alert(self.obj[name]) }) } } objct = { n1: 1, n2: 2 } var test = new Test(objct) test.change()方法提供的class Test { constructor(obj){ this.obj = obj } change() { Object.keys(this.obj).forEach((name, index) => { alert(this.obj[name]) }) } } objct = { n1: 1, n2:2 } var test = new Test(objct) test.change()对象)。这样,您就可以在处理完所有数据后调用transformValues()

您可能对讨论类似想法的KIP(处于活动状态的atm)感兴趣,例如:https://cwiki.apache.org/confluence/display/KAFKA/KIP-95%3A+Incremental+Batch+Processing+for+Kafka+Streams