kafka快速上手
2017-06-22 18:48
302 查看
下载、安装
官网下载然后解压
> 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快速上手教程 2
- Kafka快速上手教程 3
- Kafka快速上手(2017.9官方翻译)
- Kafka快速上手教程 4
- Kafka快速上手
- Kafka快速上手
- Kafka快速上手(2017.9官方翻译)
- Kafka基本概念介绍及快速上手资料
- Kafka快速上手教程 5
- Kafka快速上手-中文文档
- Kafka快速上手教程 1
- 快速上手Android数据库操作
- EasyDBO快速上手(1)
- Caliburn Micro框架快速上手(WP)
- Mina状态机快速上手
- 程序员如何快速上手一个自己不太熟悉的新项目?有什么技巧?
- 翻译:Knockout 快速上手 - 2: 安装 knockoutJS
- 异步编程:When.js快速上手
- CloudFoundry 快速上手笔记
- Spring MVC快速上手教程