我正在寻找一种在KafkaStreams中进行重新处理的工具,该方法将允许从主题的开头重新处理数据(应用某些过滤器并将这些事件的更新版本写入同一主题)。同时,有一个长期运行的应用程序在处理来自该主题的数据。
为了只处理直到启动应用程序并在其后停止的时间点 ,需要知道何时停止,这是该点最新产生的偏移量。例如。可以在启动具有(分区->偏移量)知道这些限制的拓扑之前构造一个映射,因此,当达到该偏移量时,应用程序将能够停止,将当前分区和偏移量(通过Processor API)与该初始地图的偏移量限制。
是否可以在Kafka Streams中访问最新的胶印信息?还有另一种解决方法吗? (我想您可以通过常规的Kafka消费者来创建它,寻找最终目标并获得位置,但是我问KafkaStreams中是否有集成的解决方案。)
此外,如何仅在所有分区都已达到其偏移量时才轻轻停止应用程序,知道此信息已分发,因此您需要从所有实例中了解状态?
Kafka / KafkaStreams 2.1,Scala 2.12
答案 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