阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zookeeper+Kafka集群安装

126次阅读
没有评论

共计 5211 个字符,预计需要花费 14 分钟才能阅读完成。

详细记录下 Zookeeper+Kafka 集群安装过程。准备 3 台虚拟机, 系统是 RHEL64 服务版。

1) 每台机器配置如下:

$ cat /etc/hosts


# zookeeper hostnames:
192.168.8.182      zk1
192.168.8.183      zk2
192.168.8.184      zk3

2) 每台机器上安装 jdk, zookeeper, kafka, 配置如下:

$ vi /etc/profile

# jdk, zookeeper, kafka
export KAFKA_HOME=/usr/local/lib/kafka/kafka_2.9.2-0.8.11
export ZK_HOME=/usr/local/lib/zookeeper/zookeeper-3.4.6
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$KAFKA_HOME/bin:$ZK_HOME/bin:$PATH

3) 每台机器上运行:

$ source /etc/profile

$ mkdir -p /var/lib/zookeeper

$ cd $ZK_HOME/conf

$ cp zoo_sample.cfg zoo.cfg

$ vi zoo.cfg

dataDir=/var/lib/zookeeper

# the port at which the clients will connect
clientPort=2181

# zookeeper cluster
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

4) 每台机器上生成 myid:

zk1:

$ echo “1” > /var/lib/zookeeper/myid

zk2:

$ echo “2” > /var/lib/zookeeper/myid

zk3:

$ echo “3” > /var/lib/zookeeper/myid

5) 每台机器上运行 setup 关闭防火墙

Firewall:

[] enabled

6) 每台机器上启动 zookeeper:

$ zkServer.sh start

查看状态:

$ zkServer.sh status

分布式发布订阅消息系统 Kafka 架构设计 http://www.linuxidc.com/Linux/2013-11/92751.htm

Apache Kafka 代码实例 http://www.linuxidc.com/Linux/2013-11/92754.htm

Apache Kafka 教程笔记 http://www.linuxidc.com/Linux/2014-01/94682.htm

Kafka 使用入门教程 http://www.linuxidc.com/Linux/2014-07/104470.htm

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/107386p2.htm

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

zookeeper 安装参考: http://www.linuxidc.com/Linux/2014-09/107386.htm

首先了解几个 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;
    }
}

分区 API 根据相关的键值以及系统中具有的代理分区的数量返回一个分区 id。将该 id 用作索引,在 broker_id 和 partition 组成的经过排序的列表中为相应的生产者请求找出一个代理分区。缺省的分区策略是 hash(key)%numPartitions。如果 key 为 null,那就进行随机选择。使用 partitioner.class 这个配置参数可用插入自定义的分区策略. 分区文件不会跨越 broker, 但是多个 broker 上可以有某个 topic 的分区副本.

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://www.linuxidc.com/Linux/2014-09/107386.htm

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=zk1
advertised.host.name=zk1

num.partitions=2

zookeeper.contact=zk1:2181,zk2:2181,zk3:2181

zk2:

$ vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=zk2

$ vi $KAFKA_HOME/config/server.properties

broker.id=1
port=9092
host.name=zk2
advertised.host.name=zk2

num.partitions=2

zookeeper.contact=zk1:2181,zk2:2181,zk3:2181

zk3:

$ vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=zk3

$ vi $KAFKA_HOME/config/server.properties

broker.id=2
port=9092
host.name=zk3
advertised.host.name=zk3

num.partitions=2

zookeeper.contact=zk1:2181,zk2:2181,zk3: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

在消费消息的终端显示:Hello Kafka

8) 编程操作 Producer 和 Consumer 的例子参考:http://www.linuxidc.com/Linux/2014-09/107387.htm

Kafka 的详细介绍 :请点这里
Kafka 的下载地址 :请点这里

详细记录下 Zookeeper+Kafka 集群安装过程。准备 3 台虚拟机, 系统是 RHEL64 服务版。

1) 每台机器配置如下:

$ cat /etc/hosts


# zookeeper hostnames:
192.168.8.182      zk1
192.168.8.183      zk2
192.168.8.184      zk3

2) 每台机器上安装 jdk, zookeeper, kafka, 配置如下:

$ vi /etc/profile

# jdk, zookeeper, kafka
export KAFKA_HOME=/usr/local/lib/kafka/kafka_2.9.2-0.8.11
export ZK_HOME=/usr/local/lib/zookeeper/zookeeper-3.4.6
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$KAFKA_HOME/bin:$ZK_HOME/bin:$PATH

3) 每台机器上运行:

$ source /etc/profile

$ mkdir -p /var/lib/zookeeper

$ cd $ZK_HOME/conf

$ cp zoo_sample.cfg zoo.cfg

$ vi zoo.cfg

dataDir=/var/lib/zookeeper

# the port at which the clients will connect
clientPort=2181

# zookeeper cluster
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

4) 每台机器上生成 myid:

zk1:

$ echo “1” > /var/lib/zookeeper/myid

zk2:

$ echo “2” > /var/lib/zookeeper/myid

zk3:

$ echo “3” > /var/lib/zookeeper/myid

5) 每台机器上运行 setup 关闭防火墙

Firewall:

[] enabled

6) 每台机器上启动 zookeeper:

$ zkServer.sh start

查看状态:

$ zkServer.sh status

分布式发布订阅消息系统 Kafka 架构设计 http://www.linuxidc.com/Linux/2013-11/92751.htm

Apache Kafka 代码实例 http://www.linuxidc.com/Linux/2013-11/92754.htm

Apache Kafka 教程笔记 http://www.linuxidc.com/Linux/2014-01/94682.htm

Kafka 使用入门教程 http://www.linuxidc.com/Linux/2014-07/104470.htm

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/107386p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5211字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中