python kafka 简单实践

Kafka介绍

kafka python 实践记录_数据
Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。

Kafka的整体架构非常简单,是显式分布式架构,producer、broker(kafka)和consumer都可以有多个。Producer,consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。broker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的TCP协议

MongoDB 介绍

kafka python 实践记录_数据_02
MongoDB是一个跨平台,面向文档的数据库,提供高性能,高可用性和易于扩展。MongoDB是工作在集合和文档上一种概念。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
kafka python 实践记录_kafka_03

在Windows上安装MongoDB

要在Windows上安装MongoDB,首先从  https://www.mongodb.com/download-center/community 下载 MongoDB 的最新版本
kafka python 实践记录_kafka_04

实践目标

  • producer 将csv文件的内容 作为topic发布
  • consumer 订阅内容 并将内容存储在 mongoDb 中

csv数据文件 stat.csv

kafka python 实践记录_mongodb_05

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的一个通信过程