上一篇文章了解了kafka的重要组件zookeeper,用来保存broker、consumer等相关信息,做到平滑扩展。这篇文章就实际操作部署下kafka,用几个简单的例子加深对kafka的理解,学会基本使用kafka。
环境搭建我将会在本地部署一个三台机器的zookeeper集群,和一个2台机器的kafka集群。
zookeeper集群zookeeper的搭建可以看我的上一篇文章分布式系统中zookeeper实现配置管理+集群管理,按照步骤,一步步可以很容易的搭建3太服务器的zookeeper集群。跟之前一样,我还是在本地的3个端口搭建了3台服务器,地址如下所示:
192.168.0.105:2181 192.168.0.105:2182 192.168.0.105:2183这三台服务器一会儿会在kafka配置中用到。
kafka集群第一步. 下载kafka
到kafka官网下载apache kafka,解压到/path/to/kafka目录。
第二步. 修改配置文件
复制/path/to/kafka/config/server.properties,到/path/to/kafka/config/server-1.properties和/path/to/kafka/config/server-2.properties
配置文件中修改的差异内容如下所示:
server-1.properties:
server-2.properties:
broker.id=2 listeners=PLAINTEXT://:9094 log.dirs=http://www.likecs.com/tmp/kafka-logs-2 zookeeper.connect=192.168.0.105:2181,192.168.0.105:2182,192.168.0.105:2183其中broker.id是broker的唯一标示,集群中的broker标识必须唯一。
listeners是broker监听的地址和端口,advertised.listeners用于和producer、consumer交互,后者未配置会默认使用前者,listeners的完整格式是listeners = listener_name://host_name:port,其中PLAINTEXT是协议,还有一种是SSL,具体还没太搞明白(TODO)。
log.dirs是日志数据的存放目录,也就是producer产生的数据存放的目录。
zookeeper.connect配置是zookeeper的集群,broker启动之后将信息注册到zookeeper集群中。
第三步. 启动服务器
cd /path/to/kafka bin/kafka-server-start.sh -daemon config/server-1.properties bin/kafka-server-start.sh -daemon config/server-2.properties使用jps命令可以看见2个kafka进程,证明启动成功了。
第四步. 创建topic
创建topic一般使用kafka自带的脚本创建:
其中--zookeeper就是后面就是我们上面配置的zookeeper集群,--replication-factor代表每个分区在集群中复制的份数,后面的值要小于kafka集群中服务器数量,--partitions表示创建主题的分区数量,一般分区越大,性能越好,--topic后边儿就是创建主题的名字,运行成功之后会看到Created topic "user-event".字样,表示创建成功,会在kafka配置的日志目录下创建主题信息,比如下面的:
ll /tmp/kafka-logs-1
ll /tmp/kafka-logs-2
drwxr-xr-x 7 ritoyan wheel 224 6 3 21:21 clock-tick-1 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-0 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-1 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-2 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-3 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-4 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-5 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-6 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-7 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-8 drwxr-xr-x 6 ritoyan wheel 192 6 3 21:26 user-event-9可以看到两个broker中都创建了主题user-event的10个分区。可能也有人要问了,clock-tick这个主题怎么在broker1中有2个分区,broker2中有1个分区,这个是我之前创建的一个分区,用了下面的命令bin/kafka-topics.sh --create --zookeeper 192.168.0.105:2181,192.168.0.105:2182,192.168.0.105:2183 --replication-factor 1 --partitions 3 --topic clock-tick,只有一份日志记录,3个分区,分区会均匀的分布在所有broker上。
至此kafka环境配置好了,西面我们看看如何使用。
基本使用安装kafka-python,用来操作kafka,pip3 install kafka-python,这里是他的文档,文档写的不错,简洁易懂kafka-python
producer 向broker发送消息