那么这次我们进行kafka的简单应用。
第一步(下载代码):
下载0.10.0.0版本并且解压,可以使用命令:tar -xvf kafka-2.11-0.10.0.0.tgz
接着我们进入解压后的目录:cd kafka-2.11-0.10.0.0
第二步(启动服务):
kafka需要使用zookeeper,所以我们需要提前安装zookeeper并且启动。如果没有安装的话,你可以使用kafka打包的最简单的脚本来获取一个快并且垃圾的单节点zookeeper实例。命令是:
bin/zookeeper-server-start.sh config/zookeeper.properties
然后启动kafka服务器:
bin/kafka-server-start.sh config/server.properties
第三步(创建topic):
现在我们创建一个单节点单分区单备份名字为test的topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1--partitions 1 --topic test现在我们可以运行如下的命令来查看topicbin/kafka-topics.sh --list --zookeeper localhost:2181同样的,当不存在topic发布的时候,如果你不想手动创建topic你可以配置你的brokers去自动创建topic
。第四步(发送消息):通过客户端的命令行kafka从文件中或者从标准输入中获取输入内容,并把它发送给kafka集群。默认情况下,
每一行都会作为一个单独的消息被发送。运行一个生产者来键入一些消息用来发送给服务器。
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testThis is a message This is another message第五步(启动一个消费者):Kafka同样拥有消费者的命令行来把信息转变为标准输出显示。
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test
--from-beginningThis is a message This is 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.dir=/tmp/kafka-logs-1config/server-2.properties: broker.id=2 listeners=PLAINTEXT://:9094 log.dir=/tmp/kafka-logs-2broker.id属性是集群中节点的唯一和永久的名字。我们不得不复写端口和日志目录因为我们是在相同的机器上运行的。我们希望所有的brokers在相同的端口上注册或者相互复写数据。
我们目前已经有了zookeeper并且我们唯一的节点已经启动,所有我们只需启动两个新的节点:
bin/kafka-server-start.sh config/server-1.properties &
bin/kafka-server-start.sh config/server-2.properties &如何创建一个拥有三分备份的topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3--partitions 1 --topic my-replicated-topic
好了,现在我们拥有了一个集群,那么我们如何知道哪个broker在做什么呢?想要知道的话运行describe topics命令:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-
topic
那么以下是关于输出的介绍(后两行),第一行给了所有分区的概况,每一个额外的行都给了一个分区的信息(
应该指的是后面那些行)。因为我们这里只有一个分区,所以我们最后只有一行。
leader是一个节点,他负责所有指定分区的读写。分区中的每个节点都有可能被随机选中为leader节点。
replicas是复制日志到这个分区的节点列表,不管他们是不是leader或者是否活着。
isr是in-sync备份的设置,这是那些仍然活着或者仍然与主机节点保持联系的复制品列表的子集。
在我们的例子中,节点一是topic分区中的唯一一个leader。
当我们在自己创建的原始的topic中运行相同的命令的时候,我们看到如下所示:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
所以我们也就并不奇怪原始的topic没有replicas并且在server0上了,因为我们集群就创建了一个server
让我们发布一些新的消息到我们新的topic中:
>bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
那么现在,让我们来消费这些信息:
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning--topic my-replicated-topic
那么现在让我们测试一下容错机制,broker1作为leader在运行,我们现在杀掉他:> ps | grep server-1.properties
564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8
/Home/bin/java...> kill -9 7564
领导能力备份发给了一个子节点,并且节点1不在处于in-sync的replicas设置:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
虽然原本拿取的写入信息的leader已经挂了,但是此时消费者仍然能够获取信息。
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning
--topic my-replicated-topic第七步(利用kafka链接导入导出数据):
在控制台输入数据并且利用它返回数据是一个非常好的开始,但是也许你需要从一些其他数据源导入数据或者导
出数据到其他的系统中。对于一些系统来说,与其写自定义内嵌代码还不如使用kafka导入导出数据。Kafka 的Connect是一个包含Kafka的工具,可以用来导入导出数据。他是一个运行connectors的拓展工具,这个工具实现了自定义逻辑用于与外部系统相交互。在快速开始中我们将会看到如何使用Kafka Connect的简单connectors来从文件中导入数据到kafka的topic中,并且把kafka topic中的数据导出到一个文件里。首先,我们以一些简单的数据来进行测试:> echo -e "foo\nbar" > test.txt接下来,我们运行两个connectors运行在standalone模式下,这也就意味着,他们运行在一个单一的、本地
的、专一的线程中。我们提供三个配置文件作为参数,第一个通常是kafka连接线程的的配置,它包含一些通用的配置例
如:需要连接的kafka broker和数据序列化的格式。其余的配置文件每个都指名了将要传感的connector。这些文件包含了一个独一无二的连接名字,一个待实例化的连接类,和连接需要的一些其他的配置。> bin/connect-standalone.sh config/connect-standalone.properties config/connect
-file-source.properties config/connect-file-sink.properties这些在Kafka中被包含的文件,利用你早先启动的默认本地集群配置创建了两个connectors:第一个是source connector用来从输入文件中读取行,并把每行都发布到topic中。第二个是一个sink connector(话说跟flume还真不是一般的像)用来从kafka topic中读取信息并把每行输出到输出文件当中。在刚开始的时候,你将会看到许多的
日志消息,其中的一些指明connectors正在被创建。一旦kafka的连接进程被启动,source connector开始从test
.txt 读取行,并把他们发布到topic:connect-test中。然后sink connector开始从connect-test中去读取行到test.sink.txt中。> cat test.sink.txtfoo bar注意消息被存放在kafka的topic:connect-test中。所以我们也可以运行一个控制台消费者来查看topic中
的数据:> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic connect-test--from-beginning
connectors持续的处理数据,所以我们可以通过管道向文件中增加数据然后观察他的移动:
> echo "Another line" >> test.txt
你应该可以看到在控制台输出了该行,并且sink 文件中也可以看到。
那么以上就是这次所翻译的内容。同时我会基于上述做个测试,然后一同发布,kafka的官网内容是我见过的
最多、最难啃得,一天一天来吧,哈哈,感谢开源。