继上一篇消息总线之zookeeper之后,终于到部署 kafka 了,如果不记得上一篇描述的目录结构,那... 怪我咯?
注意,这里用的 kafka 版本是 0.10 版,之前版本的配置跟这个版本不一样。
在部署了三个 zk 实例并形成集群之后,接下来也部署三个 kafka 实例,这里有个比较有意思的点,启动 kafka 的时候,我发现第一个实例总是会先看看有没有其他实例,没有话直接把自己当成 leader 了,后来跟上的全是小弟。( 第 n + 1 ( n > 0 ) 个节点:好气哦,可我要保持微笑! )
config 目录下的 server.properties 是 kafka 的配置,其中有几项比较重要的属性
- listeners ---> 这是客户端连接的
host:port
,你不填默认就监听 9092,伪集群下多实例会有端口冲突 - advertised.listeners ---> 这也是客户端连接的
host:port
,不过这个客户端对的是 follower 而不是用户,可以用和listeners
一样的配置 - zookeeper.connect ---> 这是连接到 zk 的配置,不用多说
- broker.id ---> 这是 kafka 单个 broker 的 id,不可重复
更多属性,这有篇官网翻译的配置表可以查看。
别费力气去找度娘了,度娘给你找的全是 0.8 or 0.9 版的配置,嗮心机挨眼瞓。
什么,你不知道 kafka 的设计?来戳这里。就像 47 所言,知己知彼就是完成任务的50%。如果还不够,其实上面的配置表就是官网文档翻译的一部分,那有一整套翻译的说明文。
在正确配置上述属性之后,先来创建个频道( 有人叫频道,有人叫事件,有人叫channel,who TM care? just running it )。我这里创建一个 testing 的频道。
kafka-topic --create --zookeeper zk-node0:3010,zk-node1:3110,zk-node2:3210 --replication-factor 3 --partitions 3 --topic testing
其中:
- --zookeeper ---> 指定 zk 实例
- --replication-factor ---> 指定一条消息在多少个 broker 上复制,一般有多少个 broker ( 就是 kafka 实例的数量 ) 就写多少
- --partitions 指定一条消息分成多少 log
然后分别启动 kafka producer & consumer
kafka-console-producer --broker-list kafka-node:4000 --topic testing
kafka-console-consumer --zookeeper zk-node1:3010 --topic testing --from-beginning
注意这两条指令的区别,第一条是连接生产者,给出的是 kafka 的实例地址,第二天连接消费者,给出的是 zk 的实例地址。
好了,连上后如果随便写条消息,如果推得动就说明成功了。
等等,怎么 consumer 收到那么多消息? producer 只发了一条哎?!
这是因为 kafka 本身就是把消息写在硬盘上的,消息默认存活期是100多个小时,具体时间在 server.properties 有写。
到这里 kafka 的部署就完成啦。