zookeeper+kafka集群安装之二
2014-05-23 12:04
489 查看
zookeeper+kafka集群安装之二
此为上一篇文章的续篇, kafka安装需要依赖zookeeper, 本文与上一篇文章都是真正分布式安装配置, 可以直接用于生产环境.zookeeper安装参考:
http://blog.csdn.net/ubuntu64fan/article/details/26678877
首先了解几个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://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=zk1
advertised.host.name=zk1
...
num.partitions=2
...
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zk2:
$ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk2
$ vi $KAFKA_HOME/config/server.propertiesbroker.id=1
port=9092
host.name=zk2
advertised.host.name=zk2
...
num.partitions=2
...
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zk3:
$ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk3
$ vi $KAFKA_HOME/config/server.propertiesbroker.id=2
port=9092
host.name=zk3
advertised.host.name=zk3
...
num.partitions=2
...
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
3)启动zookeeper服务, 在zk1,zk2,zk3上分别运行:
$ zkServer.sh start4)启动kafka服务, 在zk1,zk2,zk3上分别运行:
$ kafka-server-start.sh $KAFKA_HOME/config/server.properties5) 新建一个TOPIC(replication-factor=num of brokers)
$ kafka-topics.sh --create --topic test --replication-factor 3 --partitions 2 --zookeeper zk1:2181列出已有的topics:
$ kafka-topics.sh --list --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://shift-alt-ctrl.iteye.com/blog/1930791
相关文章推荐
- zookeeper+kafka集群安装之二
- zookeeper+kafka集群安装之二
- zookeeper+kafka集群安装之中的一个
- zookeeper、kafka的安装与配置以及集群
- Spark集群安装之——Zookeeper+Kafka 安装教程
- flink集群一键安装脚本 -- kafka消息中间件依赖zookeeper集群安装脚本
- kafka集群安装(zookeeper未使用kafka自带的)
- kafka集群安装(独立zookeeper集群)
- cent0S 7 安装 cdh5.13 笔记之二: 安装java,zookeeper,kafka
- 生产环境实战spark (11)分布式集群 5台设备 Zookeeper集群、Kafka集群安装部署
- zookeeper+kafka集群安装之一
- 一台机器上安装zookeeper+kafka集群
- kafka安装应用,zookeeper集群集成测试应用
- kafka+zookeeper集群安装与配置(CENTOS7环境)及开发中遇到的问题解决
- [参考]zookeeper集群安装 kafka 集群安装
- Zookeeper3.4.6与Kafka0.8.1.1集群安装和配置详细步骤
- KafKa基于Zookeeper集群安装
- zookeeper+kafka集群安装部署
- zookeeper+kafka集群安装之一
- hadoop1.2.1+zookeeper-3.4.5+hbase-0.94.1集群安装