zookeepr+kafka集群搭建(二)

  • zookeeper+kafka集群安装之二

    此为上一篇文章的续篇, kafka安装需要依赖zookeeper, 本文与上一篇文章都是真正分布式安装配置, 可以直接用于生产环境.

    zookeeper安装参考:

    首先了解几个kafka中的概念:
    kafka是一个消息队列服务器,服务称为broker, 消息发送者称为producer, 消息接收者称为consumer;通常我们部署多个broker以提供高可用性的消息服务集群.典型的是3个broker;消息以topic的形式发送到 broker,消费者订阅topic,实现按需取用的消费模式;创建topic需要指定replication-factor(复制数目, 通常=broker数目);每个topic可能有多个分区(partition), 每个分区的消息内容不会重复:

    假定我们有一个名称为test的topic, 分区数目为2, 当我们发送到这个test具体的消息"msg1:hello beijing"和"msg2:hello shanghai"的时候,我们如何知道消息的发送路径呢(发往哪个分区)?

    msg1如果被发送到分区test.1,则肯定不会发送到test.2. 数据发送路径选择决策受kafka.producer.Partitioner的影响:

    interface Partitioner {
       int partition(java.lang.Object key, int numPartitions);
    }

    一个伪代码的实现如下:

    package org.mymibao.mq.client;

    import kafka.producer.Partitioner;

    public class DefaultKafkaPartitioner implements Partitioner {
       private final static int FIRST_PARTITION_ID = 1;

       public int partition(Object key, int numPartitions) {
           return FIRST_PARTITION_ID;
       }
    }

    kafka安装配置参考:

    1)下载KAFKA

    $ wget http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz

    http://blog.csdn.net/ubuntu64fan/article/details/26678877

    2)配置$KAFKA_HOME/config/server.properties

    我们安装3个broker,分别在3个vm上:zk1,zk2,zk3:

    zk1:

    $ vi /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=zk1


    $ vi $KAFKA_HOME/config/server.properties

    broker.id=0
    port=9092
    host.name=hadoop0
    advertised.host.name=hadoop0
    ...
    num.partitions=2
    ...
    zookeeper.connect=hadoop0:2181,hadoop1:2181,hadoop2:2181

    zk2:


    broker.id=1
    port=9092
    host.name=zk2
    advertised.host.name=zk2
    ...
    num.partitions=2
    ...
    zookeeper.connect=hadoop0:2181,hadoop1:2181,hadoop2:2181

    zk3:

    $ vi /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=zk3
    broker.id=2
    port=9092
    host.name=zk3
    advertised.host.name=zk3
    ...
    num.partitions=2
    ...
    zookeeper.connect=hadoop0:2181,hadoop1:2181,hadoop2:2181

    3)启动zookeeper服务, 在zk1,zk2,zk3上分别运行:

    $ zkServer.sh start

    4)启动kafka服务, 在zk1,zk2,zk3上分别运行:

    $ kafka-server-start.sh $KAFKA_HOME/config/server.properties

    5) 新建一个TOPIC(replication-factor=num of brokers)

    $ kafka-topics.sh --create --topic test --replication-factor 3 --partitions 2 --zookeeper zk1:2181

    6)假设我们在zk2上,开一个终端,发送消息至kafka(zk2模拟producer)

    $ kafka-console-producer.sh --broker-list zk1:9092 --sync --topic test

    在发送消息的终端输入:Hello Kafka

    7)假设我们在zk3上,开一个终端,显示消息的消费(zk3模拟consumer)

    $ kafka-console-consumer.sh --zookeeper zk1:2181 --topic test --from-beginning

    8) 编程操作Producer和Consumer的例子参考: 


你可能感兴趣的:(kafka,zookeepr)