kafka安装配置(集群)以及收发消息讲解
一、安装配置
1、下载解压
wget http://mirror.bit.edu.cn/apache/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz
tar -zxvf kafka_2.10-0.10.2.0.tgz
kafka下载tgz包直接解压无需其他安装过程,下面是启动的过程
2、启动、收发消息操作
进入上步解压好的目录下:cd kafka_2.10-0.10.2.0
目录结构如下:
total 56
drwxr-xr-x 3 rootroot 4096 Feb 15 01:28 bin
drwxr-xr-x 2 rootroot 4096 Mar 7 20:36 config
drwxr-xr-x 2 rootroot 4096 Mar 7 18:55 libs
-rw-r--r-- 1 rootroot 28824 Feb 15 01:26 LICENSE
drwxr-xr-x 2 rootroot 4096 Mar 7 21:04 logs
-rw-r--r-- 1 rootroot 336 Feb 15 01:26 NOTICE
drwxr-xr-x 2 rootroot 4096 Feb 15 01:28 site-docs
第一步:首先启动zookeeper服务:(kafka是由zookeeper来管理其一些属性的)
bin/zookeeper-server-start.sh config/zookeeper.properties
第二步:启动kafka服务,也就是broker服务
bin/kafka-server-start.sh config/server.properties
第三步:创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
注意:上面是一行命令不是两行命令
这时候可以看到输出提示:Created topic "test".
如果你topic已经存在也会提示,信息如下:
Error while executing topic command : Topic'test' already exists.
[2017-03-07 21:36:35,062] ERRORorg.apache.kafka.common.errors.TopicExistsException: Topic 'test' alreadyexists.
(kafka.admin.TopicCommand$)
另外你也可以执行下面的命令查看你创建的topic有哪些:
bin/kafka-topics.sh --list --zookeeper localhost:2181
test
第四步:发送消息(producer)
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
aaaaaaaaaaaa
bbbbbbbbbbb
第五步收消息:(consumer)
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
aaaaaaaaaaaa
bbbbbbbbbbb
二、配置参数讲解
在kafka解压的目录下面可以看到config文件,其中zookeeper、server、producer、consumer以及其他的属性配置都在这个文件下
配置broker的属性文件是:server.properties
这里先重点解释一下里面的参数意义:
1、其中broker.id=0是broker的id,一个集群所有id不能有相同的id。
2、listeners=PLAINTEXT://192.168.1.108:9092
这个是SocketServer Settings的配置:监听的ip:port,就是producer发消息的socket地址
listeners=PLAINTEXT://192.168.1.108:9092
这里PLAINTEXT是协议,有时候你的ip写成hostname或者是localhost会早造成发消息不成功或者收不到消息,改成具体ip地址应该是最安全的方式。
3、log.dirs=/tmp/kafka-logs 是日志文件路径
4、zookeeper.connect=localhost:2181 是你的broker连接zookeeper的地址ip:port
这个四个配置项目相当重要,有时候你连接不上或者收发消息不成功的时候往往是ip地址造成的。
三、现在配置多个broker:
cp server.properties server1.properties
cp server.properties server2.properties
修改server1.properties
broker.id=1
listeners=PLAINTEXT://192.168.1.108:9093
log.dir=/tmp/kafka-logs-1
server2.properties
broker.id=2
listeners=PLAINTEXT://192.168.1.108:9094
log.dir=/tmp/kafka-logs-2
下面来演示一下:
先创建一个topic 现在我们创建一个具有三份副本、两个划分partitions的主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic chenxun
同时启动三个broker
bin/kafka-server-start.sh config/server.properties&
bin/kafka-server-start.sh config/server1.properties&
bin/kafka-server-start.sh config/server2.properties&
这里用下面的命令查看一下topic的信息
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic chenxun
看到没有:patitions是2 replication因子是3(topic里面的消息有3份) leader是1这里1就是broker.id
现在我们发消息到topic:
bin/kafka-console-producer.sh --broker-list 192.168.1.108:9092 --topic chenxun
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic chenxun
接下来;我们kill掉leader 1
ps -elf|grep server1.properties查看进程id
kill -9 32474
执行下面的命令再次查看topic的信息的变化:其中leader是不是变了
bin/kafka-topics.sh --describe --zookeeperlocalhost:2181 --topic chenxun