共计 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