Kafka介绍
Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。
Kafka的整体架构非常简单,是显式分布式架构,producer、broker(kafka)和consumer都可以有多个。Producer,consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。broker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的TCP协议
MongoDB 介绍
MongoDB是一个跨平台,面向文档的数据库,提供高性能,高可用性和易于扩展。MongoDB是工作在集合和文档上一种概念。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
在Windows上安装MongoDB
要在Windows上安装MongoDB,首先从 https://www.mongodb.com/download-center/community 下载 MongoDB 的最新版本
实践目标
- producer 将csv文件的内容 作为topic发布
- consumer 订阅内容 并将内容存储在 mongoDb 中
csv数据文件 stat.csv
Let's start
Kafka Producer
producer 将csv文件的内容 作为topic发布
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['localhost:9092'], api_version=(0, 10))
csvFilePath = 'stat.csv'
data = []
with open(csvFilePath, "rb") as csvfile:
data = csvfile.readlines()
for rec in data:
# topic为'csvdata' context为读取的CSV文件的一行
producer.send('csvdata', rec)
Kafka Consumer
consumer 订阅内容 并将内容存储在 mongoDb 中
from datetime import datetime
from kafka import KafkaConsumer
from pymongo import MongoClient
consumer = KafkaConsumer('csvdata',bootstrap_servers=['localhost:9092'],api_version=(0, 10))
client = MongoClient(port=27017)
db = client.db
collection = db.list_collection_names()[0]
timestamp = datetime.now()
result = {}
csv_data = []
header_arr = ['id','timestamp','first_name','last_name']
for message in consumer:
# 收到的订阅消息处理
csv_data = str(message.value).split(',')
data = {header_arr[i] : str(csv_data[i]) for i in range(len(header_arr))}
result = db.csvstats.insert_one(data)
总结
本Demo 演示了Kafka的一个通信过程