使用自带Zookeeper搭建kafka集群
http://blog.****.net/jund05/article/details/78507075
http://blog.****.net/u010246789/article/details/52104491
一、依赖:
Kafka依赖于Zookeeper,并且内置Zookeeper,我们可以选择独立部署Zookeeper或者使用自带的Zookeeper。这边我使用了Kafka内置的Zookeeper;关于Zookeeper部署和配置这边不会详细说明,如果有不明白的可以看这边博文:利用VMware在虚拟机上安装Zookeeper集群
二、下载:
- kafka_2.11-0.10.0.0.tgz:可以到我的****下载:kafka_2.11-0.10.0.0.tgz或者到官网下载:http://kafka.apache.org/downloads.html;
- 将下载的kafka_2.11-0.10.0.0.tgz包用rz命令上传(我用的是XShell,你也可以使用winSCP等工具)我这边上传到/usr/local下,并已经使用命令解压(tar -zxvf kafka_2.11-0.10.0.0.tgz)。三台都如此!
三、配置:
zookeeper.properties:基于利用VMware在虚拟机上安装Zookeeper集群,先配置/usr/local/kafka_2.11-0.10.0.0/config下的zookeeper.properties:
- tickTime=2000
- initLimit=10
- syncLimit=5
server.properties:从上到下配置
-
Broker的ID:broker.id=1;(每个Broker保持唯一,可从0开始递增编号,我这边为了和上面的server.1保持一致所以从1开始)。
-
日志地址:定义成你想保存的地址:我这边统一到:/usr/local/kafka/logs下(你没有可以自己创建):
-
分区数目:默认num.partitions=1,一般情况下等于broker数量,所以我改成3
-
Zookeeper连接地址:将集群中的Zookeeper地址配入,以逗号隔开:
四、启动:
-
先启动zookeeper:
- nohup /usr/local/kafka_2.11-0.10.0.0/bin/zookeeper-server-start.sh /usr/local/kafka_2.11-0.10.0.0/config/zookeeper.properties &
-
启动Kafka:
- nohup /usr/local/kafka_2.11-0.10.0.0/bin/kafka-server-start.sh /usr/local/kafka_2.11-0.10.0.0/config/server.properties &
五、验证:
-
创建topic:在zookeeper1上创建了一个叫testtopic的主题。
- /usr/local/kafka_2.11-0.10.0.0/bin/kafka-topics.sh --create --topic testtopic --zookeeper zookeeper1:2181 --replication-factor 3 --partition 3
-
查看所创建的topic:1中创建的topic,因为是集群,所以应该在zookeeper2上可以查看到:
- /usr/local/kafka_2.11-0.10.0.0/bin/kafka-topics.sh --zookeeper zookeeper2:2181 --list
-
创建发布者producer:在zookeeper1上创建一个发布者:
- /usr/local/kafka_2.11-0.10.0.0/bin/kafka-console-producer.sh -broker-list zookeeper1:9092 -topic testtopic
-
创建消费者consumer:在zookeeper2、zookeeper3上分别创建消费者:发布者发到对应topic下的内容会被对应的消费者接收到
- /usr/local/kafka_2.11-0.10.0.0/bin/kafka-console-consumer.sh -zookeeper zookeeper2:2181 -from-beginning -topic testtopic
- /usr/local/kafka_2.11-0.10.0.0/bin/kafka-console-consumer.sh -zookeeper zookeeper3:2181 -from-beginning -topic testtopic
-
producer进行发布:在3中创建的发布者在控制台等待输入,输入需要发布的内容后点击回车,消息就被发布出去了。
- consumer进行订阅:在4中创建的消费者在控制台会输出对应集群中特定topic下由发布者发出的消息
=================================================================
简要说明
新版本的kafka自带有zookeeper,其实自带的zookeeper完全够用,本篇文章以记录使用自带zookeeper搭建kafka集群。
1、关于kafka
kafka官网:http://kafka.apache.org/
kafka下载页面:http://kafka.apache.org/downloads
kafka配置快速入门:http://kafka.apache.org/quickstart
2、修改kafka配置文件
kafka安装目录下的config文件夹为其配置文件,我们需要修改的有 server.properties和zookeeper.properties。
2.1、修改日志目录
首先修改kafka的日志目录和zookeeper数据目录,因为这两项默认放在tmp目录,而tmp目录中内容会随重启而丢失:
server.properties:
log.dirs=/tmp/kafka-logs
修改为
log.dirs=/usr/local/kafka/logs
zookeeper.properties
dataDir=/tmp/zookeeper
修改为
dataDir=/usr/local/zookeeper/data
2.2、配置kafka
kafka集群为便于推选leader,一般由奇数台服务组件集群,这里以三台为例,分别已xxx.xxx.xxx.xxA、xxx.xxx.xxx.xxB和xxx.xxx.xxx.xxC代表服务的ip。以3台为例,如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失,如果是一个Leader宕机,Zookeeper会选举出新的Leader。为什么是奇数台,如果Zookeeper 集群是3台,允许宕机1台,如果是4台,同样是允许1台宕机,因为选举算法要求”超过半数“,所以多出的一台没有意义。
(服务器IP可使用ifconfig命令查看)
修改server.properties:
1、设置broker.id,保证每个broker唯一,第一台可以不修改默认为0,后面两台需要修改,如改为1和2
2、设置num.partitions,分区数量一般与broker保持一致
3、设置advertised.listeners和listeners,如listeners=PLAINTEXT://xxx.xxx.xxx.xx:9092
4、设置zookeeper.connect,配置三台服务zookeeper连接地址,如zookeeper.connect=xxx.xxx.xxx.xxA:2181,xxx.xxx.xxx.xxB:2181,xxx.xxx.xxx.xxC:2181
修改zookeeper.properties:
1、设置连接参数,添加如下配置
tickTime=2000
initLimit=10
syncLimit=5
initLimit=10
syncLimit=5
2、设置broker Id的服务地址
server.0=xxx.xxx.xxx.xxA:2888:3888
server.1=xxx.xxx.xxx.xxB:2888:3888
server.2=xxx.xxx.xxx.xxC:2888:3888
server.1=xxx.xxx.xxx.xxB:2888:3888
server.2=xxx.xxx.xxx.xxC:2888:3888
zookeeper数据目录添加id配置
在各台服务的zookeeper数据目录添加myid文件,写入服务broker.id属性值,如这里的目录是/usr/local/zookeeper/data
第一台broker.id为0的服务到该目录下执行:echo 0 > myid
3、启动kafka
kafka启动时先启动zookeeper,再启动kafka;关闭时相反,先关闭kafka,再关闭zookeeper
启动zookeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties &
启动kafka:
bin/kafka-server-start.sh config/server.properties &
bin/zookeeper-server-start.sh config/zookeeper.properties &
启动kafka:
bin/kafka-server-start.sh config/server.properties &
4、测试kafka集群
4.1、在第一台服务上创建test主题
bin/kafka-topics.sh --create --topic test --zookeeper xxx.xxx.xxx.xxA:2181 --replication-factor 3 --partition 3
4.2、展示主题,确认主题创建成功
bin/kafka-topics.sh --list --zookeeperxxx.xxx.xxx.xxA:2181
4.3、创建生产者
bin/kafka-console-producer.sh --broker-listxxx.xxx.xxx.xxA:9092 --topic test
4.4、创建消费者,再另外两台服务上分别创建消费者
bin/kafka-console-consumer.sh --zookeeper xxx.xxx.xxx.xxB:2181 --topic test --from-beginning
bin/kafka-console-consumer.sh --zookeeper xxx.xxx.xxx.xxC:2181 --topic test --from-beginning
bin/kafka-console-consumer.sh --zookeeper xxx.xxx.xxx.xxC:2181 --topic test --from-beginning
4.5、测试消息发布与消费
在IP为xxx.xxx.xxx.xxA的服务生产中输入消息回车发送,确认在服务B和C中的消费者是否接收到
5、其他
如配置完成后需要修改端口或其他配置,但是没有生效,启动报错,可以尝试清楚kafka(/usr/local/kafka/logs)和zookeeper(/usr/local/zookeeper/data)缓存目录的内容然后重新启动。