云服务器环境:CentOS 7.6
环境准备(版本见解压命令):
- java环境jdk
- zookeeper
- Kafka
传送门:kafka安装包,包括jdk,zookeeper和kafka
jdk环境安装
将下载的包上传到服务器/opt/software,解压
tar -zxvf jdk-8u311-linux-x64.tar.gz
tar -xzvf kafka_2.12-2.3.1.tgz
tar -zxvf apache-zookeeper-3.5.6.tar.gz
重命名,将三个文件夹移动到/usr/local目录下并重新命名
mv kafka_2.12-2.3.1 ./kafka
mv apache-zookeeper-3.5.6 ./zookeeper
cp -r jdk1.8.0_311/ /usr/local/
cp -r zookeeper/ /usr/local/
cp -r kafka /usr/local/
打开文件环境变量的文件并配置
vim /etc/profile
jdk和zookeeper配置如下
export JAVA_HOME=/usr/local/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${ZOOKEEPER_HOME}/bin:
export PATH=$PATH:${JAVA_PATH}
使配置文件生效:
source /etc/profile
查看是否安装成功,成功如下图所示
java -version
zookeeper环境配置
cd /usr/local/zookeeper/conf/
cp ./zoo_sample.cfg zoo.cfg
打开zoo.cfg配置文件
vim zoo.cfg
修改dataDir和dataLogDir配置
dataDir=/usr/local/zookeeper/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
在/usr/local/zookeeper/bin/下面启动zookeeper
./zkServer.sh start
./zkServer.sh status
成功如下图所示:
kafka安装:
在/usr/local/kafka/config下修改server.properties配置,单机只需要配置logs目录
# 用于本地代码测试线上的kafka的配置
listeners=PLAINTEXT://内网ip:9092
advertised.listeners=PLAINTEXT://外网ip:9092
# 单机只需配置,省略新建logs文件夹目录
log.dirs=/usr/local/kafka/logs
在/usr/local/kafka/bin目录下启动kafka
cd /usr/local/kafka/bin
启动kafka:
./kafka-server-start.sh -daemon ../config/server.properties
查看进程状态:
jps
创建topic:
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic csdn_test
查看topic列表:
./kafka-topics.sh --list --zookeeper localhost:2181
创建生产者测试:
./kafka-console-producer.sh --broker-list localhost:9092 --topic csdn_test
创建消费者测试:
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic csdn_test --from-beginning
python本地代码测试
生产者测试:
import json
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='外网ip:9092')
msg = "Hello World".encode('utf-8') # 发送内容,必须是bytes类型
producer.send('test_2', msg) # 发送的topic为test
producer.close()
前往服务器/usr/local/kafka/bin查看topic列表,看列表中是否有test_2
./kafka-topics.sh --list --zookeeper localhost:2181
如果无法找到这个topic,请参考前面kafka的conf的配置文件server.properties修改如下配置
listeners=PLAINTEXT://内网ip:9092
advertised.listeners=PLAINTEXT://外网ip:9092
消费者测试:
from kafka import KafkaConsumer
consumer = KafkaConsumer('test_2', bootstrap_servers=['外网ip:9092'])
for msg in consumer:
print(msg)
recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)