我们的kafka-streams应用程序中有一个墙上时钟标点符号,每隔几秒钟就会检查一次商店。
我们注意到,几乎每次重新平衡时,我们都会遇到一个异常org.apache.kafka.streams.errors.InvalidStateStoreException: Store xxxx is currently closed
。
我们试图在代码中引入一些睡眠,因为我们认为这可能是时间问题,但这没有帮助。
在代码的另一部分中,我们可以看到xxxx存储的恢复已完成并且可以查询。
唯一的问题似乎在于标点符号。
org.apache.kafka.streams.errors.StreamsException: task [1_0] Exception caught while punctuating processor 'KSTREAM-TRANSFORM-0000000090'
at org.apache.kafka.streams.processor.internals.StreamTask.punctuate(StreamTask.java:430)
at org.apache.kafka.streams.processor.internals.PunctuationQueue.mayPunctuate(PunctuationQueue.java:54)
at org.apache.kafka.streams.processor.internals.StreamTask.maybePunctuateSystemTime(StreamTask.java:845)
at org.apache.kafka.streams.processor.internals.AssignedStreamsTasks.punctuate(AssignedStreamsTasks.java:232)
at org.apache.kafka.streams.processor.internals.TaskManager.punctuate(TaskManager.java:427)
at org.apache.kafka.streams.processor.internals.StreamThread.maybePunctuate(StreamThread.java:1031)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:911)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:805)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:774)
Caused by: org.apache.kafka.streams.errors.InvalidStateStoreException: Store xxxx is currently closed
at org.apache.kafka.streams.state.internals.RocksDBStore.validateStoreOpen(RocksDBStore.java:223)
at org.apache.kafka.streams.state.internals.RocksDBStore.all(RocksDBStore.java:297)
at org.apache.kafka.streams.state.internals.ChangeLoggingKeyValueBytesStore.all(ChangeLoggingKeyValueBytesStore.java:104)
at org.apache.kafka.streams.state.internals.MeteredKeyValueStore.all(MeteredKeyValueStore.java:211)
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl$KeyValueStoreReadWriteDecorator.all(ProcessorContextImpl.java:435)
at com.simplybusiness.full_contact.storage.ContactRequestScheduleStorage$ContactRequestScheduleStorageEnrichments$ContactRequestScheduleStorageEnrichments.foreach(ContactRequestScheduleStorage.scala:62)
at com.simplybusiness.full_contact.processors.ContactRequestDelayerPunctuator.punctuate(ContactRequestScheduler.scala:117)
at org.apache.kafka.streams.processor.internals.ProcessorNode.punctuate(ProcessorNode.java:123)
at org.apache.kafka.streams.processor.internals.StreamTask.punctuate(StreamTask.java:426)
... 8 common frames omitted
我不确定问题出在我们的代码还是kafka-streams库。 似乎标点符号正在保留对可能已移至其他线程/任务的商店的引用。
我们正在使用kafka-streams 2.2.0版本。