安装
:brew install kafka
启动服务
:zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties & kafka-server-start /usr/local/etc/kafka/server.properties
新建一个话题Topic
Topic的名字叫"test",只有一个分区和一个备份。:
:kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic test.
查看存在的Topic列表:
:kafka-topics --list --zookeeper localhost:2181
test
除了手工创建Topic,你也可以配置你的broker当发布一个不存在的topic时自动创建topic。
发送消息
Kafka提供了一个命令行的工具,可以从输入文件或者命令行中读取消息并发送给Kafka集群。每一行是一条消息。
:kafka-console-producer --broker-list localhost:9092 --topic test
>lurongming
>lurongming2
>lurongming3
>lurongming4
消费消息
Kafka也提供了一个消费消息的命令行工具。
:kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
lurongming
lurongming2
lurongming3
lurongming4
设置多个broker
:cp /usr/local/etc/kafka/server.properties /usr/local/etc/kafka/server-1.properties
:cp /usr/local/etc/kafka/server.properties /usr/local/etc/kafka/server-2.properties
修改文件如下:
/usr/local/etc/kafka/server-1.properties
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
/usr/local/etc/kafka/server-2.properties
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
broker.id属性别重样。为了在一台机器上启动两个broker,改了一下它们的port的。
Zookeeper还在,上面用的broker还活着。 来启动这两个broker.
:kafka-server-start /usr/local/etc/kafka/server-1.properties
:kafka-server-start /usr/local/etc/kafka/server-2.properties
创建一个topic试试, 奢侈一把,把备份设置为3:
:kafka-topics --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
Created topic my-replicated-topic.
成了。运行 “describe topics” 命令瞧瞧:
:kafka-topics --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic: my-replicated-topic PartitionCount: 1 ReplicationFactor: 3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
第一行给出了分区的汇总信息。每个分区行给出分区信息。
“leader” 节点是1.
“replicas” 信息,在节点2,0,1上,不管node死活,只是列出信息而已.
“isr” 工作中的复制节点的集合. 也就是活的节点的集合.
来看看一开始创建的节点:
:kafka-topics --describe --zookeeper localhost:2181 --topic test
Topic: test PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
毫无新意,想必你已经明了了。
发布个消息:
:kafka-console-producer --broker-list localhost:9092 --topic my-replicated-topic
>zhaolu
>zhaolu2
>zhaolu3
消费它:
:kafka-console-consumer --bootstrap-server localhost:9092 --topic my-replicated-topic --from-beginning
zhaolu
zhaolu2
zhaolu3
测试一下容错. 干掉leader,也就是Broker 2:
ps | grep server-2.properties
kill -9 pid。
Leader被切换到一个follower上节, 点 2 不会被列在isr中了,因为它死了:
:kafka-topics --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic: my-replicated-topic PartitionCount: 1 ReplicationFactor: 3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 2,0,1 Isr: 0,1
但是,消息没丢啊,不信你试试:
:kafka-console-consumer --bootstrap-server localhost:9092 --topic my-replicated-topic --from-beginning
zhaolu
zhaolu2
zhaolu3