我的工作是从远程数据库中获取数据并将它们加入到kafka流中(浓缩)。我现在要做的是定期将远程数据库轮询到本地内存。我认为当这个轮询操作发生时,应该暂时停止kafka流。我目前的想法是这样的:
@Autowired
private KafkaStreams streams;
@Scheduled(cron = "0 0/15 * * * *") // this method is scheduled to run every 15 minutes
public synchronized void process() {
streams.close();
processPolling();
streams.start();
}
当方法开始运行时,应该停止处理流,然后轮询作业完成运行,流应该重新启动进行处理。
这是一个好习惯吗?有任何改进建议吗?
答案 0 :(得分:4)
更好的方法是将远程数据库流式传输到Kafka主题,并在Streams作业中本地使用这些主题。 您可以使用JDBC Connector,也可以使用各种CDC选项,具体取决于您的源数据库。
启动和停止流使其成为批处理过程,流程处理的相关注意事项和复杂性因设计而无法避免。