进入 /usr/lib 文件夹下
cd /usr/lib
创建 jvm 文件夹
sudo mkdir jvm
sudo tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/lib/jvm
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_291
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
java -version
打开链接下载kafka的tgz安装包
然后解压并进入kafka路径下,
tar -xzf kafka_2.12-2.4.0.tgz
cd kafka_2.12-2.4.0
现版本的kafka中已经集成了zookeeper不需要单独安装。
启动服务
使用Kafka之前需要先启动一个ZooKeeper服务,这里直接使用Kafka中包含的脚本即可,
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
注意-deamon表示后台运行
启动ZooKeeper服务之后再启动Kafka服务,
bin/kafka-server-start.sh config/server.properties
需要强调一下,config/server.properties是Kafka的配置文件,可以用于配置监听的host、port、broker等。
默认的ZooKeeper连接服务为localhost:2181,
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181
另外,producer和consumer的监听端口为9092,如果需要更改server的host和port端口可以通过修改config/server.properties进行配置。
命令行
需要注意的是,kafka的使用是建立在前面搭建的基础之上的,也就是说需要首先在集群上启动ZooKeeper和Kafka服务。
命令行的使用方式相对简单,通过前面的Kafka配置之后可以直接在命令行下进行使用。
使用Kafka,我们首先需要创建一个Topic,这样后续消息生产者和消息消费者才能针对性的发送和消费数据,
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
这样我们就创建了一个名为test的Topic。
我们也可以通过命令来查看我们已经创建的 Topic,
bin/kafka-topics.sh --list --zookeeper localhost:2181
test
前面介绍Kafka专业术语中已经阐述,Kafka使用过程中首先需要消息生产者发送消息,那么消费者才可以读取到消息。
启动一个终端A,执行下面命令,
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
hello world
当执行producer脚本后,会出现消息输入提示符,这是我们可以输入消息(数据),然后它会发送到对应的服务器(Broker)。
现在管道中已经有了数据,接下来我就可以使用消费者去读取数据。
另外启动一个终端B,执行下面命令,
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello world
可以看到,消息消费者一直处于监听状态,每当在终端A输入一条消息,终端B也会更新一条消息。
如果是在云服务器中,需要外网访问,则需要配置advertised.listeners,这里需要注意,不然Offset Explorer会连接不上
如果是内网中访问,不需要配置advertised.listeners等,但需要配置Advanced里的9092地址