Kakfa学习笔记(二)——体验Kafka

发送,消费消息

从官方这里下载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

多broker集群

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
复制代码

下一篇:Kakfa学习笔记(三)——Java API发送消费消息

相关文章
相关标签/搜索