Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Java Kafka将全局表同步化流到应用程序_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java Kafka将全局表同步化流到应用程序

Java Kafka将全局表同步化流到应用程序,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,对于正常工作的k流,kafka将每个应用程序的偏移存储在其内部偏移主题上。在应用程序重新启动时,应用程序根据auto.offset.reset策略重新处理主题。这是可以解释的 我使用kafka stream的GlobalKTable在应用程序上复制数据。但是,我对应用程序的重新启动感到有点困惑,因为在重新启动后(由于部署或崩溃),id(StreamsConfig.APPLICATION\u id\u CONFIG)没有更改的应用程序上没有填充。每当我用新id启动streams应用程序的新实例时,

对于正常工作的k流,kafka将每个应用程序的偏移存储在其内部偏移主题上。在应用程序重新启动时,应用程序根据
auto.offset.reset
策略重新处理主题。这是可以解释的

我使用kafka stream的
GlobalKTable
在应用程序上复制数据。但是,我对应用程序的重新启动感到有点困惑,因为在重新启动后(由于部署或崩溃),id(
StreamsConfig.APPLICATION\u id\u CONFIG
)没有更改的应用程序上没有填充。每当我用新id启动streams应用程序的新实例时,
GlobalKTable
就会被填充

一个
GlobalKTable
没有什么不同,只是一个启用了日志压缩功能的主题。创建一个状态的javadoc:

请注意,
GlobalKTable
始终应用“自动偏移重置”策略 “最早”不考虑
StreamsConfig
中的指定值

因此,我希望,无论应用程序id如何,我的streams应用程序从一开始就读取
kglobaltable存储
主题,并像这样在本地填充存储。javadoc引用的主题似乎是
some topic
,而不是
kglobaltable store

这是
GlobalKTable
的预期行为吗?此外,对于支持
GlobalKTables
的主题是否有保留策略

当我们对
某些主题
有保留策略时,这种行为还会导致
kglobaltable存储
主题上的数据过时。例如:

在时间t0,让

一些话题:(1,a)->(2,b)->(1,c)

kglobaltable存储:[(1,c)、(2,b)]

在一段时间(2,b)被保留后,我启动我的streams应用程序(使用新id),并且我的
GlobalKTable
仅存储记录(1,c)


编辑:我在MemoryKeyValueStore中使用

作为一种解决方法,您可以删除全局存储的本地检查点文件(cf)——这将在重新启动时触发引导。或者切换回默认的
RocksDB
store

顺便说一句:如果您直接以表或全局表的形式阅读主题,Kafka Streams将不会为容错创建额外的changelog主题,而是为此使用原始输入主题(这将减少Kafka集群内的存储需求)。因此,这些输入主题应该启用日志压缩

streamsBuilder.globalTable("some-topic", Materialized.as("kglobaltable-store"))