【问题标题】:Is this a correct way to block kafkastreams?这是阻止kafkastreams的正确方法吗?
【发布时间】:2018-01-31 08:05:23
【问题描述】:

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

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

这是一个好习惯吗?有什么改进建议吗?

【问题讨论】:

  • Kafka 听起来不像是满足您要求的正确工具。如果您需要停止和重新启动流式处理过程,那么它只是一个批处理作业。

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


【解决方案1】:

执行此操作的更好方法是将远程数据库流式传输到 Kafka 主题中,并在您的 Streams 作业中本地使用它们。 您可以使用JDBC Connector,或者根据您的源数据库是什么,有各种 CDC 选项。

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

【讨论】:

  • 我需要根据流中的一个记录字段查询远程数据库数据,因此我想将它们存储为类似哈希图的结构以提高查询性能。如果使远程数据库数据成为流,我应该如何进行查询?谢谢。
  • 这是一个关于高效设计和使用 Kafka Streams 的单独问题。有 StackOverflow,还有一个 Confluent Platform 邮件列表和 Slack 组寻求帮助:groups.google.com/forum/#!forum/confluent-platform / slackpass.io/confluentcommunity
猜你喜欢
  • 2018-05-06
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2012-05-11
相关资源
最近更新 更多