Kafka学习笔记2: 快速入门
2016-08-07 13:25
573 查看
在开始Kafka环境搭建之前,首先要安装Linux系统,并在Linux系统上安装JDK1.8版本,关于linux虚拟机的安装和linux系统下jdk的安装可以参考我的博文:
http://blog.csdn.net/yulei_qq/article/details/52132536 linux 虚拟机安装
http://blog.csdn.net/yulei_qq/article/details/51925673 jdk安装
安装好虚拟机和jdk之后,开始Kafka环境的搭建学习
下载完成之后,将压塑文件解压到 /usr/local目录下
可以看到/usr/local目录下有我们解压后的Kafka目录文件
Kafka使用了Zookeeper,所以首先如果没有启动Zookeeper服务的话,要启动一个Zookeeper服务。可以使用如下的脚本快速的启动一个单实例的Zookeeper服务.
2、启动Kafka服务
启动完成zookeeper服务之后,就可以启动Kafka Server了,可以用如下的脚本启动.
原因是/etc/hosts 文件没有指定当前主机名和ip的对关系,设置下就好了:
当然,你也可以更改config/server.properties 中关于主机名的配置修改成你当前虚拟机的IP地址,可以通过ifconfig查看IP地址.
我们可以运行topic 下的list 命令来查看创建的topic
注:二者择一的,你也可以配置你的broker当不存在topic时自动创建topics 来代替手动创建topic.
运行producer ,然后在控制台输入一些消息发送给 服务端。
所有的命令行工具都有额外的可选操作。 运行这个命令不带任务参数,将会展示详细的使用方法。
例如:
首先为每一个broker制作一个配置文件.
现在让我们刚刚新建的2个文件配置如下属性.
broker.id 这个属性在集群(cluster)中唯一的标识一个节点(node)。 我们重写了端口和日志目录,因为我们在同一台机器上运行这些broker,需要阻止broker注册同一端口和修改彼此数据。
我们已经启动了一个Zookeeper和一个单节点broker,所以接下来只要启动上面两个新的节点。
现在创建一个拥有三个副本的、一个分区的Topic.
好了,现在我们搭建了一个集群,但是我们怎么知道每个节点的信息呢,运行"describe topics"命令看看:
这里解释一下上面的输出 :第一行是对所有分区的一个总结,其余每一行介绍每一个分区的信息. 因为我们的Topic 只有一个分区,所以第一行下面只加了一行。
下面介绍一下上面输出的各个字段的含义:
"leader" 节点负责给定分区 消息的读和写,leader 节点是从分区中所有节点中随机选择的."replicas"
"replicas" 列出了该分区复制日志的节点,不管节点是否是Leader节点或是否在服务运行中.
"isr" 是 "同步" replicas 的一个集合。是 "replicas" 的一个子集,列出当前运行服务的节点 和以后的Leader节点
在我们的例子当中,节点(node) 1 是 该topic 唯一分区的一个leader。
我们可以运行同样的命令对于我们最开始创建的topic test:
让我们发布一些消息到我们新的Topic.
注:官网上的如下命令查询的时候,命令行没有任何显示,查询不到对应broker 的进程,ps -ef 可以查询所有的进程,但是也看不出哪个进程对应哪个服务,所以测试的时候,启动命令后面不要加& ,这样关闭服务的时候可以直接在启动终端ctrl+C来关闭对应的broker服务,暂时还没有找到好的方法,有知道的朋友可以留言分享下,谢谢.
然后用--describe命令查看下,另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:
虽然最初负责写leader的down掉了,但是之前的消息还是可以消费的.
http://blog.csdn.net/yulei_qq/article/details/52132536 linux 虚拟机安装
http://blog.csdn.net/yulei_qq/article/details/51925673 jdk安装
安装好虚拟机和jdk之后,开始Kafka环境的搭建学习
一、下载Kafka安装文件.
可以从Apache官网下载最新版本的Kafka安装文件,我下载的0.10.0.0版本下载完成之后,将压塑文件解压到 /usr/local目录下
[root@yulei ~]# tar -zxvf kafka_2.11-0.10.0.0.tgz -C /usr/local
可以看到/usr/local目录下有我们解压后的Kafka目录文件
二、启动服务
1、启动Zookeeeper服务Kafka使用了Zookeeper,所以首先如果没有启动Zookeeper服务的话,要启动一个Zookeeper服务。可以使用如下的脚本快速的启动一个单实例的Zookeeper服务.
[root@yulei kafka_2.11-0.10.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties
2、启动Kafka服务
启动完成zookeeper服务之后,就可以启动Kafka Server了,可以用如下的脚本启动.
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-server-start.sh config/server.properties但是,我启动失败了,报如下错误:
原因是/etc/hosts 文件没有指定当前主机名和ip的对关系,设置下就好了:
[root@yulei kafka_2.11-0.10.0.0]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.142.131 yulei
当然,你也可以更改config/server.properties 中关于主机名的配置修改成你当前虚拟机的IP地址,可以通过ifconfig查看IP地址.
三、创建Topic
我们来创建一个名称为"test" 的topic ,它只有一个分区,只有一个副本.[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test Created topic "test".
我们可以运行topic 下的list 命令来查看创建的topic
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --list --zookeeper localhost:2181 test
注:二者择一的,你也可以配置你的broker当不存在topic时自动创建topics 来代替手动创建topic.
四、发送一些消息
伴随Kafka而来的一个命令行客户端,可以从一个文件或标准输入 获取输入数据,然后作为一个messages 发送给Kafka集群. 默认的每行将作为一条单独的消息发送.运行producer ,然后在控制台输入一些消息发送给 服务端。
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message This is anther message
五、启动一个Consumer
Kafka也提供了一个consumer 命令行客户端,并将消息在在控制台标准的展示出来.[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning This is a message This is anther message你可以在一个终端运行consumer,另一个终端运行producer,然后你在producer输入消息,就可以看在你输入的消息在consumer端展示出来了.
所有的命令行工具都有额外的可选操作。 运行这个命令不带任务参数,将会展示详细的使用方法。
例如:
六、搭建一个 multi-broker 的集群
目前为止,我们启动了单个broker,但是那样不好玩. 对于Kafka而言,单一的broker 只是一个集群中大小的一个, 所以没有什么变化除了启动多个broker实例。只是去感受下,我们来扩展我们的集群到三个节点 (仍然在我们本地的机器上).首先为每一个broker制作一个配置文件.
[root@yulei kafka_2.11-0.10.0.0]# cp config/server.properties config/server-1.properties [root@yulei kafka_2.11-0.10.0.0]# cp config/server.properties config/server-2.properties
现在让我们刚刚新建的2个文件配置如下属性.
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
broker.id 这个属性在集群(cluster)中唯一的标识一个节点(node)。 我们重写了端口和日志目录,因为我们在同一台机器上运行这些broker,需要阻止broker注册同一端口和修改彼此数据。
我们已经启动了一个Zookeeper和一个单节点broker,所以接下来只要启动上面两个新的节点。
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-server-start.sh config/server-1.properties &
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-server-start.sh config/server-2.properties &
现在创建一个拥有三个副本的、一个分区的Topic.
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic Created topic "my-replicated-topic".
好了,现在我们搭建了一个集群,但是我们怎么知道每个节点的信息呢,运行"describe topics"命令看看:
[root@yulei kafka_2.11-0.10.0.0]# 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
这里解释一下上面的输出 :第一行是对所有分区的一个总结,其余每一行介绍每一个分区的信息. 因为我们的Topic 只有一个分区,所以第一行下面只加了一行。
下面介绍一下上面输出的各个字段的含义:
"leader" 节点负责给定分区 消息的读和写,leader 节点是从分区中所有节点中随机选择的."replicas"
"replicas" 列出了该分区复制日志的节点,不管节点是否是Leader节点或是否在服务运行中.
"isr" 是 "同步" replicas 的一个集合。是 "replicas" 的一个子集,列出当前运行服务的节点 和以后的Leader节点
在我们的例子当中,节点(node) 1 是 该topic 唯一分区的一个leader。
我们可以运行同样的命令对于我们最开始创建的topic test:
[root@yulei kafka_2.11-0.10.0.0]# 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这里没有什么好惊讶的,原始的topic "test" 没有副本 运行在Server 0 ,这个Server 0是我们创建时在集群中的唯一Server.
让我们发布一些消息到我们新的Topic.
[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic .... my test message 1 my test message 2 ^C[root@yulei kafka_2.11-0.10.0.0]#让我们消费上面发布的消息:
^C[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic .... my test message 1 my test message 2现在让我们来测一下容错能力. Broker 1 扮演者Leader的角色,所以我们把node 1的服务停了,即server-1.properties配置文件对应的那个服务.
注:官网上的如下命令查询的时候,命令行没有任何显示,查询不到对应broker 的进程,ps -ef 可以查询所有的进程,但是也看不出哪个进程对应哪个服务,所以测试的时候,启动命令后面不要加& ,这样关闭服务的时候可以直接在启动终端ctrl+C来关闭对应的broker服务,暂时还没有找到好的方法,有知道的朋友可以留言分享下,谢谢.
ps | grep server-1.properties
然后用--describe命令查看下,另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:
虽然最初负责写leader的down掉了,但是之前的消息还是可以消费的.
^C[root@yulei kafka_2.11-0.10.0.0]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic ... my test message 1 my test message 2
相关文章推荐
- Kafka学习笔记2: 快速入门
- Kafka学习笔记2: 快速入门
- C++Primer学习笔记一:快速入门
- c++primer 学习笔记(1.0)快速入门
- Linux学习笔记——vi/vim编辑器命令快速入门
- C++ Primer复习和学习笔记 第一章 快速入门
- 韩顺平PHP学习视频笔记整理024php快速入门 bs和cs介绍
- C++ Primer个人学习笔记 第1章 快速入门
- Python学习笔记 01 快速入门
- lua学习笔记之一(C/C++程序员的Lua快速入门[初阶话题])
- C++Primer 学习笔记 第一章 (快速入门)
- XML学习笔记,快速入门
- Iptables学习笔记和快速入门手册
- “ASP.Net快速入门”学习笔记
- 【C++ Primer学习笔记】第1章:快速入门
- OpenCV学习笔记: 快速入门例程
- perl学习笔记 - 快速入门!
- Python学习笔记 01 快速入门
- OpenCV学习笔记: 快速入门例程
- Iptables学习笔记和快速入门手册