タスクが消費を完了した場合、実際のビジネスでは、特に指定されたタスクに関連して、対応するメッセージを完了し、単に自動的カフカパーティションによって割り当てられた消費の話題を、指定した私たちの実際のニーズを満たすことができなかった、と我々は、パーティションを指定する必要があります生産と消費。さらに騒ぎがなければ、構成コードの詳細な説明を通じて生産者と消費者をしましょう。
プロデューサーコード
注:我々は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)))に特別な注意を払う必要があります相互に排他的であり、両方が一つだけ、指定されたトピックの元指定の消費パターンを指定することができ、パーティションの割り当てポリシーは、ユーザパーティション割り当てポリシーによって定義された指定されたパーティションの消費パターンを指定する、カフカで指定します。