Multithreading 如何确保Executor服务处理StateStore中的数据而不被永久阻止

Multithreading 如何确保Executor服务处理StateStore中的数据而不被永久阻止,multithreading,apache-kafka-streams,executorservice,rocksdb,Multithreading,Apache Kafka Streams,Executorservice,Rocksdb,我有一个基于Kafka streams的应用程序(使用低级API),简而言之,它执行以下操作: 流进程(具有process()方法的进程) 从卡夫卡主题读取数据 将数据放入StateStore(由RocksDB支持) 流处理器在初始化期间生成一个线程(在init()方法中,将其称为工作线程): 工作线程是执行器服务,每1分钟唤醒一次 从同一StateStore读取数据,然后进行处理 我有一个要求,即需要每2小时(而不是每分钟)叫醒一次员工执行者服务 由于流线程在工作线程执行器服务

我有一个基于Kafka streams的应用程序(使用低级API),简而言之,它执行以下操作:

流进程(具有
process()
方法的进程)

  • 从卡夫卡主题读取数据

  • 将数据放入
    StateStore
    (由
    RocksDB
    支持)

流处理器在初始化期间生成一个线程(在init()方法中,将其称为工作线程):

  • 工作线程是执行器服务,每1分钟唤醒一次

  • 从同一StateStore读取数据,然后进行处理

我有一个要求,即需要每2小时(而不是每分钟)叫醒一次员工执行者服务

由于流线程在工作线程执行器服务尝试执行读/写操作的同一状态存储上执行读/写操作,我如何确保工作线程在不被永久阻塞的情况下执行工作;很可能,流线程将在StateStore上持有锁/监视器


有人能提供一些关于如何解决这个问题的信息吗?

我相信RocksDB API是线程安全的,所以它不应该是一个问题

作为一个旁白,你可以考虑使用而不是产卵不同的线程。标点器由流线程调用,因此它将是单个线程