从官方这里下载Kafka的压缩包并解压node
> tar -xzf kafka_2.12-2.2.0.tgz
> cd kafka_2.12-2.2.0
复制代码
启动Kafka自带的ZooKeeper,若是启动有问题,尝试sudoshell
> bin/zookeeper-server-start.sh config/zookeeper.properties
复制代码
启动Kafka一个broker,默认启动端口是9092apache
> bin/kafka-server-start.sh config/server.properties
复制代码
建立一个叫test
的topic,只包含一个分区,一个副本(分区的备份)bootstrap
> bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
复制代码
咱们经过命令行启动一个消费者,指定刚刚建立叫test的topic。执行完能够看到等待输出小程序
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
复制代码
启动一个生产者,一样指定test主题。这个脚本容许咱们从控制台输入,一行即一条消息bash
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
复制代码
能够看到命令行停住,咱们在控制台输入几句话分布式
This is a message
Another message
复制代码
能够看到消费者控制台出现咱们输入的信息,相似一个聊天室的小程序post
Kafka是一个分布式集群系统,上面咱们只是开了一个broker,下面来尝试开三个broker学习
首先,复制多两份配置文件ui
> 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
:标识每一个节点的惟一值listeners
:这个broker启动监听的地址端口log.dirs
:日志路径在以前已经启动了9092端口的broker基础上,咱们用这两份配置文件启动多两个broker
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
复制代码
而后咱们建立一个分区为3,副本为3的主题
> bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic my-replicated-topic
复制代码
能够用看一下这个topic的状况
> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
复制代码
能够看到输出
Topic:my-replicated-topic PartitionCount:3 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: my-replicated-topic Partition: 1 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: my-replicated-topic Partition: 2 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
复制代码
能够看到,Kafka把分区平均地分到每一个broker上,每一个分区都有一个Leader以及3个副本。能够尝试链接不一样broker进行发送,消费消息,这里再也不演示
咱们先用broker0发布几条消息
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
This is a 3-replicated message
333333
复制代码
接着咱们能够"掐断"broker0,看一下会怎样
> ps aux|grep server.properties
root 1202 0.2 2.4 7047864 394736 s001 S.....
> sudo kill -9 1202
复制代码
而后看一下这个topic的状况
> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
复制代码
Topic:my-replicated-topic PartitionCount:3 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: my-replicated-topic Partition: 1 Leader: 1 Replicas: 0,1,2 Isr: 1,2
Topic: my-replicated-topic Partition: 2 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
复制代码
能够看到分区0的Leader已经变成broker1,这时候若是咱们尝试消费test,会发现消费不了,由于test只有一个副本在broker0上,而后broker0已经断线了
> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
[2019-05-15 21:44:05,436] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
...
复制代码
可是若是咱们链接broker1去从新消费,依然能够消费到broker0被"掐断"前发送的消息
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test --from-beginning
This is a 3-replicated message
333333
复制代码