0

私の仕事は、リモートのデータベースからデータを取得し、それらをkafkaストリームに組み込むことです(濃縮)。私が今やりたいことは、定期的にリモートDBをローカルメモリにポーリングすることです。このポーリング操作が行われると、カフカストリームを一時的に停止する必要があると思います。これはkafkastreamをブロックする正しい方法ですか?

@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

カフカは、あなたの要件に適したツールのようには聞こえません。ストリーミングプロセスを停止して再起動する必要がある場合は、単なるバッチジョブです。 – LuckyGuess

答えて

3

これを実行するより良い方法は、リモートDBをKafkaトピックにストリーミングして、Streamsジョブでこれらをネイティブに使用することです。 JDBC Connectorを使用するか、ソースデータベースの種類に応じてさまざまなCDCオプションがあります。

ストリームを開始および停止すると、バッチ処理が行われ、関連する考慮事項および複雑さがあり、ストリーム処理が設計によって回避されます。

+0

私はストリームのレコードの1つのフィールドに基づいてリモートDBデータを照会する必要があるので、クエリパフォーマンスを向上させるために構造体のようなハッシュマップとしてそれらを保存したいと思います。リモートDBデータをストリームにする場合、どのようにクエリを実行すればよいですか?ありがとう。 – zonyang

+0

これは、カフカストリームの効率的な設計と使用に関する別の質問です。 StackOverflowには、Confluent PlatformメーリングリストとSlackグループもあります。https://groups.google.com/forum/#!forum/confluent-platform/ https://slackpass.io/confluentcommunity –

関連する問題