メッセージミドルウェア-kafka(II)

リサーチニュースミドルウェア

メッセージミドルウェア-kafka(II)

ビルドへの環境

ステップ1:ダウンロードカフカ、ダウンロードをクリックして、最新バージョンを解凍します。

 tar -xzf kafka_2.9.2-0.8.1.1.tgz
 cd kafka_2.9.2-0.8.1.1

ステップ2:サービスの開始
カフカは、まずスタートZookperの、単にZookkeeper以下のサービスの単一のインスタンスを有効、飼育係を使用しています。あなたが始めることができるようにするには、コマンドコンソールのアドオン&シンボルの終了後に残すことができます。

bin/zookeeper-server-start.sh config/zookeeper.properties &

スタートカフカ:

bin/kafka-server-start.sh config/server.properties

ステップ3:トピックを作成します

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

トピックを作成するには、listコマンドで表示

bin/kafka-topics.sh --list --zookeeper localhost:2181 test

ステップ4:メッセージを送信する。
カフカは、単純なコマンドライン・プロデューサを使用して、またはサーバへの標準入力および送信メッセージからファイルから読み取ります。メッセージを送信するには、各コマンドをデフォルト。
いくつかの実行プロデューサーとコンソールメッセージを出力し、これらのメッセージは、サーバーに送信されます

 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 

ステップ5:スタートコンシューマー
ライン消費者がメッセージを読み、標準出力にすることができます

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

結果を達成する:
コマンドライン端末で実行消費者は、他の端末の実行プロデューサコマンドラインは、入力メッセージを端末とすることができる、他の端末は、メッセージを読み取り。
ステップ6:ビルドはより多くのブローカクラスタの
今のクラスタからなる3つのブローカーで始まる、これらはまた、このマシン上のブローカーノードである:
まず、各ノードの書込み設定ファイル:

cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties

次のパラメータでのファイルの新しいコピーを追加します。

config/server-1.properties:
    broker.id=1
    port=9093
    log.dir=/tmp/kafka-logs-1

config/server-2.properties:
    broker.id=2
    port=9094
    log.dir=/tmp/kafka-logs-2

同じマシン上で、別のポートを開発し、上書きされたデータを防ぐために、ログファイルをする必要があるため、クラスタ内のノードをマークするだけbroker.id。
飼育係はすでに開始している可能性があり、ノードは、他の2つのノードは今開始します

 bin/kafka-server-start.sh config/server-1.properties &
 
 bin/kafka-server-start.sh config/server-2.properties &

トピックを作成3つのコピーがあります。

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

今、私たちはどのように各ノードそれについての情報を知るために、クラスタを設定しましたか?ファイル名を指定して実行「は、それに対してコマンド」のトピックについて説明します」。

 bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
 //效果
 Topic:my-replicated-topic       PartitionCount:1        ReplicationFactor:3     Configs:
        Topic: my-replicated-topic      Partition: 0    Leader: 1       Replicas: 1,2,0 Isr: 1,2,0
        下面解释一下这些输出。第一行是对所有分区的一个描述,然后每个分区都会对应一行,因为我们只有一个分区所以下面就只加了一行。
        eader:负责处理消息的读和写,leader是从所有节点中随机选择的.
replicas:列出了所有的副本节点,不管节点是否在服务中.
isr:是正在服务中的节点.

カフカテストフォールトトレランス機構(省略)

ビルドにカフカの開発環境

Mavenのプロジェクトで、のpom.xmlに依存関係を追加します

<dependency>
        <groupId> org.apache.kafka</groupId >
        <artifactId> kafka_2.10</artifactId >
        <version> 0.8.0</ version>
</dependency>

設定プログラムは、
最初の接続の様々な構成インターフェイスコンフィギュレーションファイルの役割として作用カフカパラメータ:

kage com.sohu.kafkademon;
public interface KafkaProperties
{
    final static String zkConnect = "10.22.10.139:2181";
    final static String groupId = "group1";
    final static String topic = "topic1";
    final static String kafkaServerURL = "10.22.10.139";
    final static int kafkaServerPort = 9092;
    final static int kafkaProducerBufferSize = 64 * 1024;
    final static int connectionTimeOut = 20000;
    final static int reconnectInterval = 10000;
    final static String topic2 = "topic2";
    final static String topic3 = "topic3";
    final static String clientId = "SimpleConsumerDemoClient";
}

プロデューサー

import java.util.Properties;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
/**
* @author leicui [email protected]
*/
public class KafkaProducer extends Thread
{
    private final kafka.javaapi.producer.Producer<Integer, String> producer;
    private final String topic;
    private final Properties props = new Properties();
    public KafkaProducer(String topic)
    {
        props.put("serializer.class", "kafka.serializer.StringEncoder");
        props.put("metadata.broker.list", "10.22.10.139:9092");
        producer = new kafka.javaapi.producer.Producer<Integer, String>(new ProducerConfig(props));
        this.topic = topic;
    }
    @Override
    public void run() {
        int messageNo = 1;
        while (true)
        {
            String messageStr = new String("Message_" + messageNo);
            System.out.println("Send:" + messageStr);
            producer.send(new KeyedMessage<Integer, String>(topic, messageStr));
            messageNo++;
            try {
                sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

消費者

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
/**
* @author leicui [email protected]
*/
public class KafkaConsumer extends Thread
{
    private final ConsumerConnector consumer;
    private final String topic;
    public KafkaConsumer(String topic)
    {
        consumer = kafka.consumer.Consumer.createJavaConsumerConnector(
                createConsumerConfig());
        this.topic = topic;
    }
    private static ConsumerConfig createConsumerConfig()
    {
        Properties props = new Properties();
        props.put("zookeeper.connect", KafkaProperties.zkConnect);
        props.put("group.id", KafkaProperties.groupId);
        props.put("zookeeper.session.timeout.ms", "40000");
        props.put("zookeeper.sync.time.ms", "200");
        props.put("auto.commit.interval.ms", "1000");
        return new ConsumerConfig(props);
    }
    @Override
    public void run() {
        Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
        topicCountMap.put(topic, new Integer(1));
        Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
        KafkaStream<byte[], byte[]> stream = consumerMap.get(topic).get(0);
        ConsumerIterator<byte[], byte[]> it = stream.iterator();
        while (it.hasNext()) {
            System.out.println("receive:" + new String(it.next().message()));
            try {
                sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

シンプル送受信が
次のプログラムを実行して、あなたは、単に受信したメッセージを送ることができます。

public class KafkaConsumerProducerDemo
{
    public static void main(String[] args)
    {
        KafkaProducer producerThread = new KafkaProducer(KafkaProperties.topic);
        producerThread.start();
        KafkaConsumer consumerThread = new KafkaConsumer(KafkaProperties.topic);
        consumerThread.start();
    }
}

出典ます。https://blog.csdn.net/wangzhanzheng/article/details/79720029

公開された30元の記事 ウォンの賞賛8 ビュー20000 +

おすすめ

転載: blog.csdn.net/wg22222222/article/details/104829252