Kafka Producer


topic
partition
トピックには複数のパーティションがあります.情報を受信するとパーティションに割り当てられます.
Producer
カフカで情報を生産し、カフカのテーマのアプリケーション、サーバに転送します.
メッセージにキー値を指定すると、指定したパーティションに送信されます.キー値が指定されていない場合、パーティションはround-robinで平均的に割り当てられます.
Key
メッセージ送信時にキー値が指定されている場合は、キーのHash値をパーティション割り当ての参照として使用します.
  • 指定するパーティションは、鍵値
  • を指定してください.
  • Key値がnullの場合、Round Robin方式で割り当てられます.
    Key値は、send()メソッドの2番目のパラメータに設定されます.
  • 転送結果をチェックせずに送信
    これは,作成者がメッセージを送った後に到着を確認しないコードである.
    カフカが生きている場合、プロデューサーは自動的にメッセージを再送信し、メッセージの転送に失敗しても、ほとんどが転送に成功しますが、いくつかのメッセージが失われます.
    producer.send();
    Sync転送
    同期されたメッセージ転送は、応答待ちのためにスレッドを停止し、効率が低く、時間がかかります.send()後、RecordMetadataのリターンを受けます.
    Async転送
    非同期方式はcallbackメソッドを一緒に送信し、成功/失敗に基づいてcallbackメソッドを実行します.
     public void sendMessage(String message) {
            ListenableFuture<SendResult<String, String>> future = orderTemplate.send(topicName, message);
            future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
    
                @Override
                public void onSuccess(SendResult<String, String> result) {
                    log.debug("전송 성공!!");
                }
    
                @Override
                public void onFailure(Throwable ex) {
                    throw new TomsException("전송에 실패했습니다. ");
                }
            });
        }
    転送に成功するには論理的に実行する必要がありますが、syncを使用して効率を低下させるのは間違っていると思いますので、asyncを使用してコールバックを実行する方法を選択しました.