摘要
前边转发的五篇文章,作者对kafka的设计作了很多介绍,文章写的时间也比较早,现在kafka最新稳定版本已经是0.10.1.0。设计思路没有改变,只是对前文中提到的改进的方面已做了改进。
本文主要内容是kafka启动配置,以及一些简单的测试。 大部分内容来自kafka 0.10.1.0的官方文档
快速启动
下载解压
大家可点击下边链接下载最新稳定版0.10.1.0
https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz
也可访问
http://kafka.apache.org/downloads 选择其他版本
>tar -xzf kafka_2.11-0.10.1.0.tgz
>cd kafka_2.11-0.10.1.0
配置启动一个单节点的kafka服务
kafka启动需要zookeeper支持,请先安装并正确启动zookeeper
http://blog.csdn.net/alphags/article/details/52745822
编辑配置文件
vi config/server.properties
修改
zookeeper.connect=h3:2181,h4:2181,h5:2181
(备注:我这里的zookeeper是安装在主机h3,h4,h5上的,此处配置要根据实际机器情况自定)
运行以下命令启动kafka
>bin/kafka-server-start.sh -daemon config/server.properties
创建一个topic
>bin/kafka-topics.sh --create --zookeeper h3:2181 --replication-factor 1 --partitions 1 --topic test
通过下面命令可以看到所有topic列表
> bin/kafka-topics.sh --list --zookeeper localhost:2181
test
开启一个producer测试发送信息
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
开启一个consumer接收信息
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
启动多节点kafka服务
在上边的快速启动中我们介绍了一个单节点的kafka服务的启动以及使用方法,下面我们介绍如何启动多个节点的kafka服务集群,我们仍在一台机器上测试。
我们在config目录下复制两个新的文件server.properties文件,并修改文件内容
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
>vi config/server-1.properties:
broker.id=101
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
>vi config/server-2.properties:
broker.id=102
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
broker.id是kafka节点在集群中的唯一标识,互不相同,我们需要修改log.dir,因为我们在同一台机器上运行,不同kafka节点的log.dir 不能相同。然后我们就可以启动这两个节点了
> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...
“&”是让kafka启动后后台运行,这样我们就不需要再启动一个终端了。现在我们于创建一个topic这次让replication-factor 是2
> bin/kafka-topics.sh --create --zookeeper h3:2181 --replication-factor 2 --partitions 1 --topic my-replicated-topic
然后我们运行”describe topics”查看一下每个节点都有哪些内容
>bin/kafka-topics.sh --describe --zookeeper h3:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:2 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 101 Replicas: 101,102 Isr: 101,102
每一行是一些简要信息,partition有一个,ReplicationFactor 2个
下边每一行都是这个topic在每个partition内的情况,因为我们只有一个partition所以下边只有一行。
leader 是表示所有该Partiton(partition 0)的读写都走这个节点(101,前边server-1.properties中配置的broker.id=101)
我们看一下刚才的创建的test topic 以示区别
./kafka-topics.sh --describe --zookeeper h3:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
这里leader 0,是因为我们创建test topic时,server.properties中 broker.id=0,而且是只有这一个节点
现在我们发送消息做个测试
> bin/kafka-console-producer.sh --broker-list localhost:9093 --topic my-replicated-topic
...
my test message 1
my test message 2
^C
然后我们消费这些信息
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
^C
接下来我们kill一个node 测试其容错性
> ps aux | grep server-1.properties
7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564
我们可以看到leader已变成了102
./kafka-topics.sh --describe --zookeeper h3:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:2 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 102 Replicas: 101,102 Isr: 102
消息依然可以正常消费
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
^C