您的位置:首页 > 运维架构 > Linux

how-to-install-kafka-full-distributed-cluaster-on-centos6.6-x86_64

2015-04-26 19:14 507 查看
kafka入门部署测试记录

对象:新人

参考:

kafka 官方文档

prepare software

jdk >=1.6

kafka

[kafka download](http://kafka.apache.org/downloads.html)
curl -C - -O https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.2.1/kafka_2.10-0.8.2.1.tgz[/code] 
上传下载的tar包到测试主机: /docker_vo01/soft/bigdata/kafka_2.10-0.8.2.1.tgz

prepare test vms using docker

使用已存在的 hadoop/spark集群 spark1/spark2/spark3

之前使用 docker构建了 hadoop/spark集群。

具体部署还没发布到博客,等发布后再补链接。

创建测试虚拟机的命令:

docker run -i -t -d -P -h spark1 --name spark1 --volume=/Users/Users_datadir_docker:/docker_vol01 centos:centos6 /bin/bash
docker run -i -t -d -P -h spark2 --name spark2 --volume=/Users/Users_datadir_docker:/docker_vol01 centos:centos6 /bin/bash
docker run -i -t -d -P -h spark3 --name spark3 --volume=/Users/Users_datadir_docker:/docker_vol01 centos:centos6 /bin/bash


install kafka on spark1/2/3

解压预编译的安装包(tar.gz/tgz)

su - hadoop

mkdir -p ~/app/
cd ~/app/
tar zxf /docker_vol01/soft/bigdata/kafka_2.10-0.8.2.1.tgz
ln -s kafka_2.10-0.8.2.1/ kafka

可选,编辑用户环境
vi ~/.bash_profile
\#For kafka
KAFKA_HOME=~/app/kafka/
PATH=$KAFKA_HOME/bin:$PATH
export KAFKA_HOME


configure kafka in full distributed cluster on spark1/2/3

cd ~/app/kafka

mkdir -p ~/data/kafka_tmp_dir/logs

cp config/server.properties config/server.properties.org

vi config/server.properties

spark1

broker.id=0
port=9092
log.dir=/home/hadoop/data/kafka_tmp_dir/logs

#zookeeper.connect=spark1:2181,spark2:2181, spark3:2181

zookeeper.connect=spark1:2181,spark2:2181,spark3:2181


spark2

broker.id=1
port=9092
log.dir=/home/hadoop/data/kafka_tmp_dir/logs
zookeeper.connect=spark1:2181,spark2:2181,spark3:2181


spark3

broker.id=2
port=9092
log.dir=/home/hadoop/data/kafka_tmp_dir/logs
zookeeper.connect=spark1:2181,spark2:2181,spark3:2181


start kafka server with existed zookeeper

生产环境通常有部署好的 zookeeper集群,可以直接使用;

测试环境如果没有部署 zookeeper,可以直接使用 kafka 集成的 zookeeper

启动 kafka server

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


常见问题1:启动 kafka server 报错,

[2015-04-15 01:23:25,213] FATAL Fatal error during KafkaServerStartable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)

org.I0Itec.zkclient.exception.ZkException: Unable to connect to spark1:2181,spark2:2181, spark3:2181



Caused by: java.net.UnknownHostException: spark3: Name or service not known

原因:zookeeper.connect 不支持空格

处理方法:修改 config/server.properties 中 zookeeper.connect 配置

test kafka

测试 kafka

create advanced topic

create a new topic with a replication factor of three:

创建 多 replication factor的 topic (可以实现冗余)

bin/kafka-topics.sh --zookeeper localhost:2181 --list
bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 3 --partitions 1 --topic test2
bin/kafka-topics.sh --zookeeper localhost:2181 --describe


get broker info

查看 broker 工作状态

Okay but now that we have a cluster how can we know which broker is doing what? To see that run the “describe topics” command:

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test2


start producer

启动测试 producer

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test2
other examples:
bin/kafka-console-producer.sh --broker-list spark2:9092,spark1:9092,spark3:9092 --topic test2


start consumer

启动测试 consumer

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


test 消息发送接收



测试问题1:topic test2 的leader spark1,spark3启动 consumer,spark2上执行启动 producer,存在较大延迟(停 spark2上 producer时,spark3上 consumer才接收到消息)

原因:我的测试环境使用了 dnsmasq 作为测试主机的 DNS,如果 spark1/2/3 没有在 /etc/hosts 中直接配置集群主机的
<hostname>   <ip>
映射条目,会出现访问慢的问题,个人感觉与 zookeeper 有关;

处理方法1:在 /etc/hosts 中直接配置集群主机的
<hostname>          <ip>
映射条目

处理结果: 延迟有明显减小

test failure

测试冗余

测试结果:发现存在丢数据的情况,具体测试待整理

kafka-topic.sh --zookeeper localhost:2181 --describe
kafka-topic.sh --zookeeper localhost:2181 --list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: