您的位置:首页 > 其它

kafka快速上手

2017-06-22 18:48 274 查看

下载、安装

官网下载

然后解压

> tar -xzf kafka_2.11-0.10.2.0.tgz
> cd kafka_2.11-0.10.2.0


linux用户使用
bin/
目录下的命令,Windows用户可以使用
bin/windows/
下的命令

使用

启动服务

kafka依赖于ZooKeeper,如果没有安装zookeeper,可以用kafka包里面现成的:

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2017-06-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...


然后启动kafka

> bin/kafka-server-start.sh config/server.properties
[2017-06-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2017-06-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...


创建主题

创建一个
test
主题,1个分区,1个副本

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test


看一眼刚才创建的主题

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test


注:如果不想手动创建主题,你可以自动创建

发消息

运行kafka自带的客户端发一些消息试试。默认情况下,每一行作为一条消息发出去。

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message


消费

然后用kafka自带的消费者输出

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message


提示:

如果上面的每个命令都在不同的终端中运行,你就可以在生产者终端中输入消息后,在消费者终端中看到。

启动一个多broker的集群

目前我们已经运行了一个单broker的kafka,只是有一个节点的集群。再让我们扩展到三个节点玩一下。

为其他两个节点复制一下配置文件:

> 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.dir=/tmp/kafka-logs-1

config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2


a
broker.id
是集群中每个节点的唯一识别。我们也要改一下节点的端口和日志路径,主要因为是在本地环境,如果在多台机器上,就可以不改端口和日志路径了。

前面已经启动了zk,和一个几点,现在我们只需启动另外两个节点:

> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...


现在我们创建一个1个分区3个副本的新主题:

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic


现在我们有一个kafka集群了,那么我们怎么知道哪个broker在做什么呢? 运行
describe topics
命令看看:

> 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


第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。 因为这个主题只有一个分区,只有一行。

“leader”是负责给定分区的所有读取和写入的节点。 每个节点将成为随机选择的分区部分的引导者。

“replicas”是复制此分区日志的节点的列表,无论它们是不是leader。

“isr”是一组“同步”副本。 这是副本列表的子集,该副本目前正在生效并被leader所追踪。

我们可以再看一下最开始创建的test主题

> 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


往新的主题发一些消息:

> 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


容错

现在我们来测试容错。 broker 1作为 leader,我们kill一下试试:

> 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


win用户可以用这个命令:

> wmic process get processid,caption,commandline | find "java.exe" | find "server-1.properties"
java.exe    java  -Xmx1G -Xms1G -server -XX:+UseG1GC ... build\libs\kafka_2.10-0.10.2.0.jar"  kafka.Kafka config\server-1.properties    644
> taskkill /pid 644 /f


leader已切换到其中一个slaves节点,节点1不再处于同步副本集中:

> 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


不过消息仍然可以消费,即便刚才的leader已经挂掉了:

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2


参考

官方文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kafka