カフカ指定されたパーティションの生産、消費

 
タスクが消費を完了した場合、実際のビジネスでは、特に指定されたタスクに関連して、対応するメッセージを完了し、単に自動的カフカパーティションによって割り当てられた消費の話題を、指定した私たちの実際のニーズを満たすことができなかった、と我々は、パーティションを指定する必要があります生産と消費。さらに騒ぎがなければ、構成コードの詳細な説明を通じて生産者と消費者をしましょう。
プロデューサーコード
注:我々は2つのクラスを必要とするプロデューサーコード、クラスが本当のプロデューサーであるクラスの指定されたパーティ。
指定パーティクラス

パッケージcom.wshare.common。

輸入kafka.javaapi.producer.Producer;
輸入kafka.producer.KeyedMessage;
輸入kafka.producer.ProducerConfig;

輸入java.util.Properties;
輸入java.util.concurrent.BlockingQueue;
輸入java.util.concurrent.LinkedBlockingDeque;

/ **
 * 2017年11月15日にflyfyによって作成されます。
 * /
publicクラスKafkaPartitionerProducerUtil {
    民間最終プロデューサー<文字列、文字列>プロデューサー。
    民間最終文字列のトピック=「テスト」;
    =「1.1.1.1」民間最終文字列kafkaQueueHost。
    民間最終int型kafkaQueuePort = 9092;
    プライベートプロパティの小道具=新しいプロパティ();

    民間のBlockingQueue <KeyedMessage <文字列、文字列>> BlockingQueueの=新しいLinkedBlockingDeque <KeyedMessage <文字列、文字列>>();

    パブリックKafkaPartitionerProducerUtil(){
        props.put( "serializer.class"、 "kafka.serializer.StringEncoder")。
        props.put( "metadata.broker.list"、kafkaQueueHost + ":" + kafkaQueuePort)。
        props.put( "partitioner.class"、 "com.wshare.common.CidPartitioner");
        this.producer =新しいプロデューサー<文字列、文字列>(新ProducerConfig(小道具));
    }

    公共無効送信(文字列のキー、文字列のMSG){
        producer.send(新しいKeyedMessage <文字列、文字列>(トピック、キー、MSG));
    }

プロデューサー类

パッケージcom.wshare.common。

輸入kafka.javaapi.producer.Producer;
輸入kafka.producer.KeyedMessage;
輸入kafka.producer.ProducerConfig;

輸入java.util.Properties;
輸入java.util.concurrent.BlockingQueue;
輸入java.util.concurrent.LinkedBlockingDeque;

/ **
 * 2017年11月15日にflyfyによって作成されます。
 * /
publicクラスKafkaPartitionerProducerUtil {
    民間最終プロデューサー<文字列、文字列>プロデューサー。
    民間最終文字列のトピック=「テスト」;
    =「1.1.1.1」民間最終文字列kafkaQueueHost。
    民間最終int型kafkaQueuePort = 9092;
    プライベートプロパティの小道具=新しいプロパティ();

    民間のBlockingQueue <KeyedMessage <文字列、文字列>> BlockingQueueの=新しいLinkedBlockingDeque <KeyedMessage <文字列、文字列>>();

    パブリックKafkaPartitionerProducerUtil(){
        props.put( "serializer.class"、 "kafka.serializer.StringEncoder")。
        props.put( "metadata.broker.list"、kafkaQueueHost + ":" + kafkaQueuePort)。
        props.put( "partitioner.class"、 "com.wshare.common.CidPartitioner");
        this.producer =新しいプロデューサー<文字列、文字列>(新ProducerConfig(小道具));
    }

    無効パブリック(文字キー、文字列MSG){送る
        ; producer.send(新新KeyedMessage <文字列、文字列>(トピック、キー、MSG))
    }

注props.put( "partitioner.class"、「com.wshare.commonを私たちはパーティを定義したクラスを指定.CidPartitioner「)

消費者コード

パッケージcom.lyf.scandatatofile.Utils。

輸入kafka.cluster.Partition;
輸入kafka.consumer.ConsumerConfig;
輸入kafka.consumer.ConsumerIterator;
輸入kafka.consumer.KafkaStream;
輸入kafka.javaapi.consumer.ConsumerConnector;
輸入org.apache.kafka.clients.consumer.ConsumerRecord;
輸入org.apache.kafka.clients.consumer.ConsumerRecords。
輸入org.apache.kafka.clients.consumer.KafkaConsumer;
輸入org.apache.kafka.common.TopicPartition。

インポートのjava.io.File;
輸入java.io.FileWriter;
輸入java.text.SimpleDateFormatの。
輸入java.utilの。*;
輸入java.util.concurrent.BlockingQueue;

/ **
 * 2017年10月7日にflyfyによって作成されます。
 * /
publicクラスKafkaConsumerUtil {
    最終的な文字列のトピック=「テスト」。
    最後のプロパティの小道具=新しいプロパティ();
    公共ボイドは(文字列グループID、BlockingQueueの<ストリング> BQ){実行
        props.put( "bootstrap.servers"、 "1.1.1.1:9092を");
        props.put( "group.id"、 "テスト")。
        props.put( "auto.offset.reset"、 "早いです");
        props.put( "enable.auto.commit"、 "真");
        props.put( "auto.commit.interval.ms"、 "1000");
        props.put( "session.timeout.ms"、 "30000");
        props.put( "key.deserializer"、
        props.put( "value.deserializer"、 "org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer <文字列、文字列>消費者=新しいKafkaConsumer <>(小道具)。
        //consumer.subscribe(Arrays.asList("IP_REGISTER_yangkai "));
        consumer.assign(は、Arrays.asList(新TopicPartition( "kafka.wshare.match_meta_data.topic"、0)));
        一方、(TRUE){
            ConsumerRecords <文字列、文字列>レコード= consumer.poll(100)。
            (ConsumerRecord <文字列、文字列>の記録:記録)するため
                 のSystem.out.println( "オフセット" + record.offset()+ "キー"
                        + record.key()+ "値" + record.value());



消費者はカフカの面でconsumer.subscribe(は、Arrays.asList( "IP_REGISTER_yangkai"))とconsumer.assign(は、Arrays.asList(新TopicPartition( "kafka.wshare.match_meta_data.topic"、0)))に特別な注意を払う必要があります相互に排他的であり、両方が一つだけ、指定されたトピックの元指定の消費パターンを指定することができ、パーティションの割り当てポリシーは、ユーザパーティション割り当てポリシーによって定義された指定されたパーティションの消費パターンを指定する、カフカで指定します。 

公開された900元の記事 ウォンの賞賛387 ビュー279万+

おすすめ

転載: blog.csdn.net/kingmax54212008/article/details/104077357