本文主要翻译自官网安装部分,并配上自己运行是截图~~~图文结合,看起来方便些!


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

所以,下图中的参数删掉~~~


springboot kafka实现死信队列 kafka做消息队列_分布式消息队列


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服务器的消息。

如下图:

springboot kafka实现死信队列 kafka做消息队列_发送消息_02



第六步:建立多个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 &
...



& 符号的意思是让服务在后台运行,但是我们在这里不用 &  为了方便调试!!


我运行的截图如下:


springboot kafka实现死信队列 kafka做消息队列_zookeeper_03



好的,我们接下来开始,创建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



springboot kafka实现死信队列 kafka做消息队列_发送消息_04




springboot kafka实现死信队列 kafka做消息队列_发送消息_05




springboot kafka实现死信队列 kafka做消息队列_分布式消息队列_06



ok~~~~~

kafka分布式消息队列,安装篇就到此为止拉~~~以后,我们会讲解相关的API,利用java进行相关的开发!!!


大家,慢慢体会吧~~