/root/kafka_2.10-0.10.1.1/bin/kafka-run-class.sh: line 258: exec: java: not found
场景:腾讯云centos6 通过编译方式下载 kafka安装包,并sudo bin/zookeeper-server-start.sh config/zookeeper.properties 启动 报java not fount
解决方案参考:
建kafka并使用
kafka系列分为两个篇幅,分别是实用篇,讲使用命令和一些使用中会遇到的概念名词,理论篇,讲kafka为了实现高可用和高性能做了哪些努力。这篇我们从搭建开始,然后用kafka脚本去发送和接受信息
1.下载
wget https://archive.apache.org/dist/kafka/0.10.1.1/kafka_2.10-0.10.1.1.tgz
(注意:kafka官网地址 http://kafka.apache.org/downloads 可以选自己喜欢的版本下载)
2.解压
tar kafka_2.10-0.10.1.1.tgz
3.启动zookeeper
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/zookeeper-server-start.sh config/zookeeper.properties
/home/app/kafka_2.11-1.0.0/bin/kafka-run-class.sh: line 270: exec: java: not found
3.1遇到java 报错,安装java 开发jdk
[zelin.huang@dhzltest01.*** ~]$ sudo yum install java-1.8.0-openjdk
.......(安装输出)
[zelin.huang@dhzltest01.*** ~]$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b07)
OpenJDK 64-Bit Server VM (build 25.242-b07, mixed mode)
安装好了再来,我们可以在linux中挂载运行zookeeper,这样当我们只是暂时练下手而不是真正使用还是很好的,这样我们退出shell之后,我们启动的服务也会关闭,不会占用到系统资源(要是后台运行想关了,请用ps+kill)。如果真的是想用在生产或者测试环境,而不是顺便玩玩的话,虚拟机可以托管在
supervisor或者是以nohub模式运行。
这里我们起多个终端,可以更好地看到各个工具的输出。
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/zookeeper-server-start.sh config/zookeeper.properties
[2020-02-29 11:57:10,691] INFO Reading configuration from: config/zookeeper.properties
。。。
[2020-02-29 11:57:10,739] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)
......
需要注意的是zookeeper占用的端口号是2181
然后起另一个终端
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/kafka-server-start.sh config/server.properties
[2020-02-29 11:59:36,346] INFO KafkaConfig values:
。。。
port = 9092
。。。
[2020-02-29 11:59:36,451] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
。。。
其中可以看到kafka连接的zookeeper是上面所启动的2181端口号,所以kafka是依赖zookeeper启动的,如果我们要启动多个kafka形成一个集群,那么我们设定的连接zookeeper的服务是同一个。
kafka占用的端口号是,9092。
好,执行到这一步,我们的kafka是启动起来了。
接下来,我们使用kafka来实现一个消息队列的功能。
首先该创建一个topic,topic相当于kafka的一个消息类型,通过选择不同的topic发送,或者是监听某个topic,就可以实现消息队列。发消息的时候是需要指定topic的。
或者,您也可将topic配置为:发消息指定的topic不存在时,自动创建topic,而不是手动创建。(ps:我们公司的测试环境是不需要创建topic的,但是正式环境需要,所以曾经导致测试环境跑得好好的代码,到了正式环境就不行了)
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/kafka-topics.sh --list --zookeeper localhost:2181
test
创建消费者和生产者
这里创建了一个topic和查看所有的topic。
然后我们创建生产者和消费者,尝试发送一些消息。
一个终端做消费者,一个终端做生产者
#生产者终端
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>huangzelin
>huangzliyong
>
消费者终端
[zelin.huang@dhzltest01.*** kafka_2.11-1.0.0]$ sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
huangzelin
huangzliyong
参考地址:https://studygolang.com/articles/26877