本文主要翻译自官网安装部分,并配上自己运行是截图~~~图文结合,看起来方便些!
kafka是由LinkedIn开发,主要是用来处理Linkedin的大面积活跃数据流处理(activity stream).
此类的数据经常用来反映网站的一些有用的信息,比如PV,页面展示给哪些用户访问,用户搜索什么关键字最多,这类信息经常被log到文件里,然后线下且周期性的去分析这些数据。现在这种用户活跃数据已经成为互联网公司重要的一部分,所以必须构建一个更轻量且更精炼的基础架构
好的,下面进入正题~~~
第一步:下载
去管网下载最新版的kafka包~~
在这里我们下载 最新版
kafka_2.10-0.8.1.1.tgz
之后运行命令,解压:
> tar -xzf kafka_2.10-0.8.1.1.tgz > cd kafka_2.10-0.8.1.1
第二步:启动服务
这里需要说一下,因为kafka是运行在zookeeper之上的,所以需要提前安装zookeeper,如果你没有安装呢,也无所谓,在单机环境下,可以用kafka自带的zookeeper脚本运行~~~
> bin/zookeeper-server-start.sh config/zookeeper.properties [2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig) ...注意:这里需要说一下,这里可能出现一个错误
Unrecognized VM option
'+UseCompressedOops'
, 可以去
bin/kafka-run-class.sh中移除相关参数
这是因为 jvm参数中-XX标识的是实验性参数,kafka用了很多用来优化运行的jvm参数,而你安装的 jdk所带的jvm不一定支持这些参数,比如:-XX:+UseCompressedOops
所以,下图中的参数删掉~~~
OK~~~之后就可以了!!
现在启动kafka服务:
bin/kafka-server-start.sh config/server.properties [2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties) [2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties) ...
不出错的话,说明启动成功!
第三步:创建一个topic
让我们创建一个topic,名字为test,1个partition,1个replica
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
我们运行以下命令查看是否创建成功:
> bin/kafka-topics.sh --list --zookeeper localhost:2181 test
好的,创建成功!
我们在这里是手动创建的topic,我们也可以通过配置brokers去发布消息时,不存在topic时,自动创建tiopic!!
第四步:发布消息
现在我们可以向kafka集群发送消息了,kafka自带有客户端命令,可以将文件或者标准输入流作为消息输入。默认一行作为一条单独的消息发送!
我们通过运行producter来通过控制台向服务器发送消息:
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message This is another message
好的,我们已经成功向kafka服务器发送了两条消息
第五步:启动消费者consumer
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning This is a message This is another message
看到了吧,命令成功运行后,马上就接到了来自kafka服务器的消息。
如下图:
第六步:建立多个broker集群
到第五步,我们只是建立了单个节点,但是这并不能满足我们!!我们接下来再建立另外两个节点,当然,这些节点目前都是在一台电脑上完成的!!
> cp config/server.properties config/server-1.properties > cp config/server.properties config/server-2.properties
编辑配置文件如下:
config/server-1.properties: broker.id=1 port=9093 log.dir=/tmp/kafka-logs-1 config/server-2.properties: broker.id=2 port=9094 log.dir=/tmp/kafka-logs-2
其中,broker-id是每个节点的惟一的标示~~~
前面,我们已经启动了,zookeeper服务和server-0节点
接下来,我们就启动刚刚配置好的两个节点就好!!
> bin/kafka-server-start.sh config/server-1.properties & ... > bin/kafka-server-start.sh config/server-2.properties & ...
& 符号的意思是让服务在后台运行,但是我们在这里不用 & 为了方便调试!!
我运行的截图如下:
好的,我们接下来开始,创建topic
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
接下来,查看以下:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0可以看到,节点1是leader , 总共启动了1,2,0这三个节点~~~
接下来,我们来发送消息:
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
ok~~~~~
kafka分布式消息队列,安装篇就到此为止拉~~~以后,我们会讲解相关的API,利用java进行相关的开发!!!
大家,慢慢体会吧~~