Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 合并两个kafka流是否保留共分区_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 合并两个kafka流是否保留共分区

Apache kafka 合并两个kafka流是否保留共分区,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有两个共同划分的卡夫卡主题。一个包含自动生成的数据,另一个包含手动覆盖 我想合并它们并过滤掉任何已经被手动覆盖的自动生成的数据,然后将所有内容转发到一个合并的日志压缩主题 为此,我使用DSLAPI从每个主题创建一个流 然后,我应用以下转换,它存储任何手动数据,并删除任何已经被手动覆盖的自动数据:(Scala,但如果您了解java,应该很容易理解) class FilterManuallyClassifiedTransformer(手动重写存储名称:字符串) 扩展转换器[Long,Data,Ke

我有两个共同划分的卡夫卡主题。一个包含自动生成的数据,另一个包含手动覆盖

我想合并它们并过滤掉任何已经被手动覆盖的自动生成的数据,然后将所有内容转发到一个合并的日志压缩主题

为此,我使用DSLAPI从每个主题创建一个流

然后,我应用以下转换,它存储任何手动数据,并删除任何已经被手动覆盖的自动数据:(Scala,但如果您了解java,应该很容易理解)

class FilterManuallyClassifiedTransformer(手动重写存储名称:字符串)
扩展转换器[Long,Data,KeyValue[Long,Data]]{
//数组[Byte]用作伪值,因为我们不使用该值
变量存储:KeyValueStore[长,数组[字节]]=_
重写def init(上下文:ProcessorContext):单位={
store=context.getStateStore(ManualOverrideStoreName).asInstanceOf[KeyValueStore[Long,Array[Byte]]
}
覆盖def close():单位={}
覆盖def转换(键:长,值:数据):键值[长,数据]={
if(value.getIsManual){
store.put(key,Array.emptyByteArray)
新键值(键,值)
}
else if(store.get(key)==null){
新键值(键,值)
}
否则{
无效的
}
}
}
如果我理解正确的话,除非具有相同密钥的手动数据和自动数据位于同一分区中,否则无法保证此功能正常工作。否则,手动超控可能存储在与自动数据检查的状态存储不同的状态存储中

对吗


如果是这样,
merge
会保留我需要的共分区保证吗?

如果两个输入主题具有相同数量的分区并使用相同的分区策略,
merge()
会保留共分区