カフカのプロデューサーインターセプター

カスタムプロデューサーインターセプタは、次の2つの関数を実行します。

  1. プッシュメッセージブローカは、メッセージヘッダ内のタイムスタンプの前
  2. コールバックを押すと、統計的な失敗の数は、成功のメッセージを送信します

例:タイムスタンプインターセプターの定義

輸入org.apache.kafka.clients.producer.ProducerInterceptor;
輸入org.apache.kafka.clients.producer.ProducerRecord;
輸入org.apache.kafka.clients.producer.RecordMetadata;

輸入java.util.Map;

/ **
 *
 *
 *複数のスレッドを実行することができ、ユーザーはセキュリティスレッドを確保するための責任があります
 *
 *
 * / 
パブリック クラス TimeStampPrependerInterceptor 実装 ProducerInterceptor <文字列、文字列> {


    // メインユーザースレッドで実行されると、メッセージは呼び出しのシーケンスですが、パーティションおよびトピックのメッセージを変更しない属し前に
    公共 ProducerRecord <文字列、文字列> onSend(ProducerRecord <文字列、文字列> レコード){
         返す 新しい新しい ProducerRecordを<文字列、文字列> (record.topic()、
                record.partition()、record.timestamp()、record.key()、
                System.currentTimeMillis() + "" + record.value()のtoString())。
    }


    // または呼び出しが重いのロジックに参加していない、メッセージは、答えは通常プロデューサーのコールバック・ロジック・トリガの前に、IOスレッドproduerを実行する前に、メッセージの送信に失敗しました
    公共 のボイドonAcknowledgement(RecordMetadataメタデータ、例外例外){

    }
    // クリーンアップ
    公共 のボイドの使用を閉じます(){
    }
    // 初期化
    、公共 のボイドのconfigure(地図<文字列、?> Configsを){

    }
}

メッセージインターセプタの数のカスタム統計:

輸入org.apache.kafka.clients.producer.ProducerInterceptor;
輸入org.apache.kafka.clients.producer.ProducerRecord;
輸入org.apache.kafka.clients.producer.RecordMetadata;

輸入java.util.Map;

パブリック クラス CounterInterceptor 実装 ProducerInterceptor <文字列、文字列> {

    プライベート int型 errorCounter = 0 ;
    プライベート int型 successCounter = 0 ;


    公共 ProducerRecord <文字列、文字列> onSend(ProducerRecord <文字列、文字列> レコード){
         戻りレコード。
    }

    公共 ボイドonAcknowledgement(RecordMetadataメタデータ、例外例外){
         場合(例外== NULL ){
            successCounter ++ ;
        } {
            errorCounter ++ ;
        }
    }

    公共 に近いです(){
        System.out.println( "成功して送信:" + successCounter)。
        System.out.printlnは( "送信されませんでした:" + errorCounter)。
    }

    公共 のボイドのconfigure(地図<文字列、?> コンフィグ){

    }
}

インターセプタメインクラスの設定を追加します。

一覧<文字列>インターセプター= 新しいのArrayList <文字列> ();
 interceptors.add( "cn.org.fubin.producer.TimeStampPrependerInterceptor" );
 interceptors.add( "cn.org.fubin.producer.CounterInterceptor" );
 properties.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG、インターセプタ)。

 文字列のトピック =「テストトピック」;
 プロデューサー <文字列、文字列>プロデューサー= 新しい KafkaProducer <文字列、文字列> (プロパティ)。
 以下のためにINT iは= 0; I <10; I ++ ){
     ProducerRecord <文字列、文字列>のレコード=  ProducerRecord <文字列、文字列>(トピック、 "メッセージ" + I)。
     producer.send(レコード)に.get();
 }

最初のオープンプッシュ消費者のメッセージングプログラムを実行する前に、インターセプタは効果かどうかを確認します。

ビン/カフカ-コンソール-消費者。SH --bootstrapサーバはlocalhost:9092、localhostを:9093、localhostを:9094 --topicテストトピック

次のようにメッセージは次のとおりです。

1558785539173 、message0
 1558785539476 、メッセージ1
 1558785539490 、メッセージ2
 1558785539504 、message3
 1558785539521 、message4
 1558785539535 、message5
 1558785539547 、message6
 1558785539562 、message7
 1558785539574 、メッセージ8
 1558785539587、message9

 

おすすめ

転載: www.cnblogs.com/fubinhnust/p/11967874.html