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

发送,消费消息

从官方这里下载Kafka的压缩包并解压

> tar -xzf kafka_2.12-2.2.0.tgz
> cd kafka_2.12-2.2.0
复制代码

启动Kafka自带的ZooKeeper,如果启动有问题,尝试sudo

> bin/zookeeper-server-start.sh config/zookeeper.properties
复制代码

启动Kafka一个broker,默认启动端口是9092

> bin/kafka-server-start.sh config/server.properties
复制代码

创建一个叫test的topic,只包含一个分区,一个副本(分区的备份)

> 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主题。这个脚本允许我们从控制台输入,一行即一条消息

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
复制代码

可以看到命令行停住,我们在控制台输入几句话

This is a message
Another message
复制代码

可以看到消费者控制台出现我们输入的信息,类似一个聊天室的小程序

多broker集群

Kafka是一个分布式集群系统,上面我们只是开了一个broker,下面来尝试开三个broker

首先,复制多两份配置文件

> 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发送消费消息

转载于:https://juejin.im/post/5cdc19a96fb9a0323120b3e8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值