这是阻止kafkastreams的正确方法吗?

时间:2017-08-22 22:09:50

标签: apache-kafka apache-kafka-streams apache-kafka-connect spring-kafka

我的工作是从远程数据库中获取数据并将它们加入到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();
}

当方法开始运行时,应该停止处理流,然后轮询作业完成运行,流应该重新启动进行处理。

这是一个好习惯吗?有任何改进建议吗?

1 个答案:

答案 0 :(得分:4)

更好的方法是将远程数据库流式传输到Kafka主题,并在Streams作业中本地使用这些主题。 您可以使用JDBC Connector,也可以使用各种CDC选项,具体取决于您的源数据库。

启动和停止流使其成为批处理过程,流程处理的相关注意事项和复杂性因设计而无法避免。