生产者(Producer):信息的发布者(publish)
消费者(Consumer):消息的接收者,也就是订阅者(subscribe)
话题(Topic):消费者发消息的对象,消费者也是从Topic中获取信息
组(Group):同一组的消费者对于同一消息只会收到一次,每一组都会对应一个id
分区(partitions):消费者接收消息的最小单位,实现了Kafka的高吞吐量
这里列出一张图来直观的看生产者与消费者的关系(图片来源:http://czj4451.iteye.com/blog/2041096)
可以看出多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。
笔者使用Kafka来进行消息队列的分布式处理。包含一个生产者和多个消费者,这里最主要的地方就在于要让消费者接收到的数据都不一样并且在数量上尽量相近以实现负载均衡。因此对于Kafka分区是最关键的部分,在说具体应用之前还是从部署开始说起,笔者是在windows系统下做的代码编写与测试。
第一步是安装JDK环境这里不再多说。
第二步部署zookeeper:
去官网http://zookeeper.apache.org/releases.html#download下载压缩包,解压在某个文件夹下,然后将“zoo_sample.cfg”重命名为“zoo.cfg”,然后打开“zoo.cfg”编辑dataDir=“自己想放的目录下,一般是解压目录/tmp”,最后在系统环境变量中添加ZOOKEEPER_HOME = ”你的解压目录“, 编辑path系统变量,添加%ZOOKEEPER_HOME%\bin
最后打开命令行输入zkserver即可启动zookeeper,这里要注意的是使用kafka期间这个命令行窗口是不能关的。zookeeper的默认端口是2181.
第三步部署kafka:
从官网http://kafka.apache.org/downloads.html下载二进制(Binary )版本的kafka,同样解压找到配置文件server.properties,编辑log.dirs为自己想要存放的目录下,编辑zookeeper.connect=localhost:2181,笔者是在本地做的测试,所以使用localhost,应用时要按照实际情况进行修改,Kafka的默认端口为9092。最后在安装目录下按下Shift+右键,选择“打开命令窗口”选项,打开命令行。输入.\bin\windows\kafka-server-start.bat .\config\server.properties启动kafka。之后可以通过打开/bin/windows目录,同样按下Shift+右键,选择“打开命令窗口”选项,打开命令行进行相关操作,比如:
创建一个topic:
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic test
删除一个topic
kafka-topics.bat --zookeeper localhost:2181 --delete --topic test
修改topic
kafka-topics.bat –zookeeper 127.0.0.1:2181 -–alter -–partitions 4 –topic test
其中partitions指的就是分区数,而java利用java字符串数组加上TopicCommand类也可以实现对于Topic的操作,包括增删改,具体实现代码如下: