kafka在大公司是经常用到的,之前在途牛有使用过,但都是听别人说从kafka取数据流分析用户使用量啦,或者统计app推送消息的成功率与用户点击率啦,这些都是别人在做,自己没有真正去接触了解kafka究竟是什么。后来在现在这家公司,也是有用到kafka的,但是都是用在数据治理,数据导入那边,我们做java服务端业务方向的好像不太会使用到。总之自己听说了kafka很久,但对它却不是很了解,我对kafka的认识仅限于它是做消息传输的,可以有消息队列,生产者能够将指定的消息发送给指定的消费者消费。
直到前段时间,我对象他们业务有使用到kafka,她就问我对kafka了解,我感觉自己项目里有使用,就说自己了解些,于是她就说回家让我讲讲。直到回家我给他讲的时候,我发现自己根本不懂,她问了我一些问题,我都回答不上,甚至她问我topic是什么,我感觉就是用于分组的,但我回答的不深入,她也没太懂。
前两天,她又问我问题了。因为她启动服务后,日志里报错kafka超时。于是她想看下对应机器上的kafka有没有启动,她不太知道怎么看,我想帮忙,可是我也不太清楚kafka的目录结构,kafka怎么启动,kafka如何查看是否启动成功了。感到很气馁,感觉自己水平太差了,平时也不注重学习。
于是昨天,我简单搜了下kafka如何安装使用的,简单看了下,就进行了些实际安装操作。看着在linux服务器上一条条命令执行成功,我心里感到很开心,总算对kafka有了些深入的认识,不再是懵懵懂懂的了解了。当然我会简单描述下自己对kafka的学习与操作。
kafka是基于发布/订阅的分布式消息系统、数据管道。是一个分布是流数据系统,需要使用Zookeeper进行集群管理。我们可以在https://kafka.apache.org/downloads地址下载二进制版本kafka_2.12-2.7.0.tgz,然后将二进制包放到linux服务器上,使用tar -zxvf kafka_2.12-2.7.0.tgz进行解压缩。解压后的目录结构如下:
-bin
-zookeeper-server-start.sh
-kafka-server.start.sh
-kafka-topics.sh
-kafka-console-producer.sh
-kafka-console-consumer.sh
-config
-zookeeper.properties
-server.properties
-libs
-logs
这个安装包里面是集成了zookeeper的,所以我们可以通过bin/zookeeper-server-start.sh -daemon config/zookeeper.properties启动zookeeper,zookeeper端口是2181.接着用bin/kafka-server-start.sh -daemon config/server.properties后台启动kafka,端口是9092。
kafka启动成功后,我们用ps -ef | grep kafka可以看到kafka使用java -cp /home/admin/soft/kafka/kafka_2.12-2.7.0/bin/../libs/kafka_2.12-2.7.0.jar Kafka.kafka config/server.properties来启动的,当然我给的是简写后的命令,实际还包括一些jvm的配置和其他jar包的引入。
使用bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test命令可以创建单副本单分区的topic主题test。
使用bin/kafka-topics.sh --list --zookeeper localhost:2181查看所有topic
使用echo "The first record" | kafka-console-producer.sh --broker-list localhost:9092 --topic test发送消息
使用echo "The first record" | kafka-console-producer.sh --broker-list localhost:9092 --topic test打印test里的所有消息
使用bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list查看消费组列表
使用bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test查看topic详情
我对kafka的认识与介绍就到这里了。