- 安装环境:
- centos 6.5 64位
- 所需软件版本:
- jdk1.8.0_171
- nginx-1.12.2.tar.gz
- kafka_2.11-0.10.2.1.tgz
- zookeeper-3.4.5.tar.gz
- scala-2.11.4.tgz
-
- 所需服务器:4台(三台安装scala、zookeeper和kafka,一台安装nginx)
-
- 【A:部署kafka集群】
- 1.安装jdk
- yum install java-1.8.0-openjdk* -y
- 2.安装scala
- tar -zxvf scala-2.11.4.tgz -C /usr/local/src
- 3.进入Scala解压目录,进行重命名
- cd /usr/local/src
- mv scala-2.11.4 scala
- 1.安装zookeeper
- tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/src
- 2.进入到zk的配置文件目录下,重命名文件夹并修改zookeeper配置文件
- cd /usr/local/src
- mv zookeeper-3.4.5 zk
- cd zk
- mv zoo_sample.cfg zoo.cfg
- 3.更改zoo.cfg两个地方:
- dataDir=/usr/local/src/zk/data
- 文件最后新增:
- server.0=172.27.16.13:2888:3888
- server.1=172.27.16.12:2888:3888
- server.2=172.27.16.11:2888:3888
- 4.返回到zk目录下,新建data目录并进入
- mkdir data
- cd data/
- 5.新建myid文件
- vi myid
- 6.设置id,与server.0一样,这里第一台设置为0(3台机器,按0、1、2依次分配)
-
- 7.在另外两台机器上重复以上步骤,唯一不同的是myid文件依次设置不同的id
-
- 1.安装kafka上传kafka安装包并解压
- tar -zxvf kafka_2.11-0.10.2.1.tgz -C /usr/local/src
- 2.更改文件夹名称
- mv kafka_2.11-0.10.2.1 kafka
- 3.进入到kafka安装包config目录修改配置文件
- cd kafka/config/
- vi server.properties
- 在这个版本中主要更改3个地方
- broker.id=0(3台机器,按0、1、2依次分配)
- delete.topic.enable=true(命令行删除topic【真正删除还需要在/tmp/目录下删除kafka-logs文件夹】)
- advertised.listeners=PLAINTEXT://172.27.16.12:9092(设置为本机的ip)
- zookeeper.connect=172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181(zookeeper地址)
- 4.在另外两台机器上重复以上步骤,唯一不同的是broker.id依次设置不同的id
-
- 【启动kafka集群】
- 1.进入到kafka安装目录
- cd /usr/local/src/kafka/bin
- 2.启动kafka
- ./kafka-server-start.sh -daemon /usr/local/src/kafka/config/server.properties
- 3.创建topic
- ./kafka-topics.sh --create --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --replication-factor 1 --partitions 1 --topic track
- ./kafka-topics.sh --create --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --replication-factor 1 --partitions 1 --topic user
- 4.查看topic描述
- ./kafka-topics.sh --describe --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --topic track
- ./kafka-topics.sh --describe --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --topic user
- 5.查看所有topic
- ./kafka-topics.sh --list --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181
-
- 6.删除topic【真正删除还需要在/tmp/目录下删除kafka-logs文件夹,然后重启kafka】
- ./kafka-topics.sh --delete --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --topic track
- 7.关闭kafka服务
- ./kafka-server-stop.sh
-
-
- 8.创建一个消费者
- ./kafka-console-consumer.sh --bootstrap-server 172.27.16.13:9092,172.27.16.12:9092,172.27.16.11:9092 --topic track --from-beginning
- 9.创建一个生产者
- ./kafka-console-producer.sh --broker-list 172.27.16.13:9092,172.27.16.12:9092,172.27.16.11:9092 --topic track
- 10.此时在生产者窗口下输入信息,消费者即可收到消息
-
- 补充:
- 启动一个命令行的生产者
- ./kafka-console-producer.sh --broker-list 172.27.16.13:9092,172.27.16.12:9092,172.27.16.11:9092 --topic xiaoniu
-
- 启动一个命令行的消费者
- ./kafka-console-consumer.sh --zookeeper 172.27.16.13:2181,172.27.16.12:2181,172.27.16.11:2181 --topic my-topic --from-beginning
-
- 消费者连接到borker的地址【这个和命令行消费者不同】
- ./kafka-console-consumer.sh --bootstrap-server 172.27.16.13:9092,172.27.16.12:9092,172.27.16.11:9092 --topic xiaoniu --from-beginning
-
-
- 至此kafka集群安装完毕
-
-
- 【B:安装nginx及kafka插件】
- 1.上传nginx安装包
- 2.解压nginx
- tar -zxvf nginx-1.12.2.tar.gz -C /usr/local/src/
-
- 3.安装git
- yum install -y git
-
- 4.切换到/usr/local/src目录,然后将kafka的c客户端源码clone到本地
- cd /usr/local/src
- git clone https://github.com/edenhill/librdkafka
-
- 5.进入到librdkafka,然后进行编译
- cd librdkafka
- yum install -y gcc gcc-c++ pcre-devel zlib-devel
- ./configure
- make && make install
-
- 6.安装nginx整合kafka的插件,进入到/usr/local/src,clone nginx整合kafka的源码
- cd /usr/local/src
- git clone https://github.com/brg-liuwei/ngx_kafka_module
-
- 7.进入到nginx的源码包目录下(编译nginx,然后将将插件同时编译)
- cd /usr/local/src/nginx-1.12.2
- ./configure --add-module=/usr/local/src/ngx_kafka_module/
- make
- make install
-
- 8.修改nginx的配置文件
- 主要修改两个地方:
- kafka;
- kafka_broker_list 118.25.213.188:9092 118.24.12.122:9092 118.25.213.36:9092;
- 以及
- location = /kafka/track {
- kafka_topic track;
- }
- #这是转发另外一个topic,可以不设置
- location = /kafka/user {
- kafka_topic user;
- }
- 9.启动nginx
- sbin/nginx
- 10.查看nginx进程
- ps -ef | grep nginx
- netstat -anpt | grep nginx
-
- 【启动nginx,报错,找不到kafka.so.1的文件】
- error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No such file or directory
- 解决办法:加载so库
- echo "/usr/local/lib" >> /etc/ld.so.conf
- ldconfig
-
- 11.启动成功后,向kafka集群发送消息测试
- curl localhost/kafka/track -d "message send to kafka track topic"
-
-
- 【补充以及报错解决:】
- kafka创建topic报错解决:
- 创建topic的paration大于可用的boker:
- 创建topic 指定partitions 为5 而 borker只有一个
- ./bin/kafka-topics.sh -zookeeper idc007128:2181,idc007124:2181,idc007123:2181 -topic test -replication-factor 2 -partitions 5 -create
- ##问题
- Error while executing topic command replication factor: 2 larger than available brokers: 1
- 解决:
- -replication-factor 1 副本数为1
- ./bin/kafka-topics.sh -zookeeper idc007128:2181,idc007124:2181,idc007123:2181 -topic test -replication-factor 1 -partitions 1 -create
- Created topic "test".
-
- 启动kafka报内存不足的错误
- 修改kafka-server-start.sh启动参数
- export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M"