安装与使用
安装
1:kafka的运行需要java环境支持,因此需要在系统中安装JDK(先安装最新版的JDK21试试)
2:访问官网Apache Kafka,下载kafka2.4.0版本的安装文件kafka_2.12-2.4.0.tgz,解压缩到d盘根目录下(因为kafka的运行需要依赖于Zookeeper,因此,需要下载并安装Zookeeper。当然,kafka也内置了Zookeeper服务,因此,也可以不用额外安装Zookeeper,而是直接使用内置Zookeeper。)
使用
启动Zookeeper服务
1,在Windows系统中打开第一个cmd窗口,启动Zookeeper服务:
cd /d D:\kafka_2.13-3.6.1
(输入时用Tab键可以补全)
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
2, 执行上面命令后,cmd窗口会返回一堆信息,然后就停住不动了,没有回到命令提示符状态,这时不要误以为死机了,而是Zookeeper服务器已经启动,正在处于服务状态。所以,不要关闭这个cmd窗口,如果关闭则Zookeeper服务停止
启动kafka服务
1,打开第二个cmd窗口,启动kafka服务:
cd /d D:\kafka_2.13-3.6.1
.\bin\windows\kafka-server-start.bat .\config\server.properties
2,执行以上命令如果启动成功,则会出现与启动Zookeeper服务一样的情况,不要关闭窗口,一旦关闭,则kafka服务停止
测试
1,打开第三个cmd窗口,进入kafka服务:
cd /d D:\kafka_2.13-3.6.1
2,创建一个新主题user_behavior
.\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic user_behavior
创建成功会有如下显示
检查一下是否创建成功
.\bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
可以看到已经成功创建了一个名叫user_behavior的主题
3,创建一个产生消息的生产者
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic user_behavior
输入此命令后光标会进行闪动,然后就可以在光标处输入消息并发送出去,例如输入
I love Kafka
4,新建第四个cmd窗口
cd /d D:\kafka_2.13-3.6.1
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic user_behavior --from-beginning
接下来就能看到在第三个cmd窗口发送出去的消息
至此,测试成功
在Python中的使用
生产者
创建
from kafka import KafkaProducer
import json
producer = KafkaProducer(bootstrap_servers=['localhost:9092'], # kafka集群地址(现在这个为在本地运行的地址)
value_serializer=lambda m: json.dumps(m).encode('utf-8'), # 指定值的反序列化方法
api_version=(0, 10, 2) # 必要参数,没有会报错
)
调用
# kafka生产者接收用户行为数据发至主题
def send_to_kafka(data):
try:
producer.send('user_behavior', value=data) # 指定发送主题
except Exception as e:
print(f"An error occurred while sending message to Kafka: {e}")
消费者
创建
# Kafka消费者处理实时数据
consumer = KafkaConsumer(
'user_behavior',
bootstrap_servers=['localhost:9092'], # Kafka集群的地址,如果Kafka运行在本地,默认地址是localhost:9092
auto_offset_reset='latest', # 从最新的消息开始消费
enable_auto_commit=True, # 自动提交偏移量
value_deserializer=lambda x: json.loads(x.decode('utf-8')), # 指定值的反序列化方法
api_version=(0, 10, 2),
)
# 循环消费消息
for message in consumer:
# 获取消息内容
behavior_data = message.value
print(f'Received message: {behavior_data}')
# 处理实时用户行为数据(将其存储到数据库、进行分析、实时推荐)
# 存储到MongoDB数据库
save_to_database(behavior_data)
# # # 推荐
# # user_item_matrix = time_decay_collaborative_filtering(behavior_data)
# # user_id = behavior_data.get('user_id', None)
# # recommendations = recommend(user_id, user_item_matrix)
# # # 新建一个“recommendResult”主题,把推荐结果发至该主题,后在API接口中监听该主题给前端调用
# # producer.send('recommendResult', value=json.dumps(recommendations).encode('utf-8'))