快速入门
第一步:下载压缩包
下载2.1.0版本并解压缩。
> tar -xzf kafka_2.11-2.1.0.tgz
> cd kafka_2.11-2.1.0
第二步:启动服务器
1.使用与kafka打包的脚本来获得一个单节点ZooKeeper实例
> bin/zookeeper-server-start.sh config/zookeeper.properties
2.启动kafka服务器
> bin/kafka-server-start.sh config/server.properties
第三步:创建topic
创建一个只有一个分区(partition)和一个副本因子(replication-factor)的主题(topic),取名为”test“
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看topic列表
> bin/kafka-topics.sh --list --zookeeper localhost:2181
向不存在的主题发布时自动创建主题=>在server.properties配置文件中追加以下两个属性
auto.create.topics.enable=true
default.replication.factor=3
第四步:开始一个生产者producer,发送消息
Kafka附带一个命令行客户机(sh脚本–kafka-console-producer.sh),它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每一行都将作为单独的消息发送。
> 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
如果上面的每个命令都在不同的终端中运行,那么现在应该能够在生产者终端中输入消息,并看到它们出现在消费者终端中。
第六步:在一台机器上搭建多节点集群
在一台机器上搭建3个broker,使其组成一个Kafka集群,(本人感觉这样做并无卵用,集群的作用没有发挥,后面会在不同机器上搭建)
进入config目录下,将server.properties 拷贝2份,并重命名
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
修改配置文件
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
broker.id是集群中每个节点的名称,它是唯一且永久的
之前本人是这样配置的,但是使用java api运行生产者和消费者均不能发布和订阅消息,百度了一下listeners要写上ip,可参考以下:"PLAINTEXT"表示协议,可选的值有PLAINTEXT和SSL,hostname可以指定IP地址,也可以用"0.0.0.0"表示对所有的网络接口有效,如果hostname为空表示只对默认的网络接口有效,也就是说如果你没有配置advertised.listeners,就使用listeners的配置通告给消息的生产者和消费者,这个过程是在生产者和消费者获取源数据(metadata)。如果都没配置,那么就使用java.net.InetAddress.getCanonicalHostName()返回的值,对于ipv4,基本就是localhost了。然后生产者就会一直卡死,没有反应,原因是你的客户端连接的是127.0.0.1:9092,而不是你期望的服务器的地址。因此只需要把listeners的地址修改成你的服务器地址即可。
使用新建的两个配置文件分别启动服务器
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
创建一个只有1个分区(partition)和3个副本(replication)的主题(topic),取名为”my-replicated-topic“
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
查看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
第一行给出topic所有分区的摘要
“leader”:该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的。
“replicas”:备份的节点列表,无论该节点是否是leader或者目前是否还活着,只是显示。
“isr”:“同步备份”的节点列表,也就是活着的节点并且正在同步leader。
我们可以在创建的原始主题上运行相同的命令来查看它的位置:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
发布消息到my-replicated-topic主题
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
my test message 1
my test message 2
消费
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2
容错能力测试(实测貌似不行)
> 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
查看
> 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: 2 Replicas: 1,2,0 Isr: 2,0
之前发布的信息仍然可以被消费
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2