在python环境下运用kafka对数据进行实时传输的方法


Posted in Python onDecember 27, 2018

背景:

为了满足各个平台间数据的传输,以及能确保历史性和实时性。先选用kafka作为不同平台数据传输的中转站,来满足我们对跨平台数据发送与接收的需要。

kafka简介:

Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

总之:kafka做为中转站有以下功能:

1.生产者(产生数据或者说是从外部接收数据)

2.消费着(将接收到的数据转花为自己所需用的格式)

环境:

1.python3.5.x

2.kafka1.4.3

3.pandas

准备开始:

1.kafka的安装

pip install kafka-python

在python环境下运用kafka对数据进行实时传输的方法

2.检验kafka是否安装成功

在python环境下运用kafka对数据进行实时传输的方法

3.pandas的安装

pip install pandas

4.kafka数据的传输

直接撸代码:

# -*- coding: utf-8 -*-
'''
@author: 真梦行路
@file: kafka.py
@time: 2018/9/3 10:20
'''
import sys
import json
import pandas as pd
import os
from kafka import KafkaProducer
from kafka import KafkaConsumer
from kafka.errors import KafkaError
 
KAFAKA_HOST = "xxx.xxx.x.xxx" #服务器端口地址
KAFAKA_PORT = 9092    #端口号
KAFAKA_TOPIC = "topic0"  #topic
 
data=pd.read_csv(os.getcwd()+'\\data\\1.csv')
key_value=data.to_json()
class Kafka_producer():
 '''
 生产模块:根据不同的key,区分消息
 '''
 
 def __init__(self, kafkahost, kafkaport, kafkatopic, key):
  self.kafkaHost = kafkahost
  self.kafkaPort = kafkaport
  self.kafkatopic = kafkatopic
  self.key = key
  self.producer = KafkaProducer(bootstrap_servers='{kafka_host}:{kafka_port}'.format(
   kafka_host=self.kafkaHost,
   kafka_port=self.kafkaPort)
  )
 
 def sendjsondata(self, params):
  try:
   parmas_message = params  #注意dumps
   producer = self.producer
   producer.send(self.kafkatopic, key=self.key, value=parmas_message.encode('utf-8'))
   producer.flush()
  except KafkaError as e:
   print(e)
 
 
class Kafka_consumer():
 
 
 def __init__(self, kafkahost, kafkaport, kafkatopic, groupid,key):
  self.kafkaHost = kafkahost
  self.kafkaPort = kafkaport
  self.kafkatopic = kafkatopic
  self.groupid = groupid
  self.key = key
  self.consumer = KafkaConsumer(self.kafkatopic, group_id=self.groupid,
          bootstrap_servers='{kafka_host}:{kafka_port}'.format(
           kafka_host=self.kafkaHost,
           kafka_port=self.kafkaPort)
          )
 
 def consume_data(self):
  try:
   for message in self.consumer:
    yield message
  except KeyboardInterrupt as e:
   print(e)
 
def sortedDictValues(adict):
 items = adict.items()
 items=sorted(items,reverse=False)
 return [value for key, value in items]
 
def main(xtype, group, key):
 '''
 测试consumer和producer
 '''
 if xtype == "p":
  # 生产模块
  producer = Kafka_producer(KAFAKA_HOST, KAFAKA_PORT, KAFAKA_TOPIC, key)
  print("===========> producer:", producer)
  params =key_value
  producer.sendjsondata(params)
 
 
 if xtype == 'c':
  # 消费模块
  consumer = Kafka_consumer(KAFAKA_HOST, KAFAKA_PORT, KAFAKA_TOPIC, group,key)
  print("===========> consumer:", consumer)
 
  message = consumer.consume_data()
  for msg in message:
   msg=msg.value.decode('utf-8')
   python_data=json.loads(msg) ##这是一个字典
   key_list=list(python_data)
   test_data=pd.DataFrame()
   for index in key_list:
    print(index)
    if index=='Month':
     a1=python_data[index]
     data1 = sortedDictValues(a1)
     test_data[index]=data1
    else:
     a2 = python_data[index]
     data2 = sortedDictValues(a2)
     test_data[index] = data2
     print(test_data)
 
 
 
   # print('value---------------->', python_data)
   # print('msg---------------->', msg)
   # print('key---------------->', msg.kry)
   # print('offset---------------->', msg.offset)
 
 
 
if __name__ == '__main__':
 main(xtype='p',group='py_test',key=None)
 main(xtype='c',group='py_test',key=None)

在python环境下运用kafka对数据进行实时传输的方法

数据1.csv如下所示:

在python环境下运用kafka对数据进行实时传输的方法

几点注意:

1、一定要有一个服务器的端口地址,不要用本机的ip或者乱写一个ip不然程序会报错。(我开始就是拿本机ip怼了半天,总是报错)

2、注意数据的传输格式以及编码问题(二进制传输),数据先转成json数据格式传输,然后将json格式转为需要格式。(不是json格式的注意dumps)

例中,dataframe->json->dataframe

3、例中dict转dataframe,也可以用简单方法直接转。

eg: type(data) ==>dict,data=pd.Dateframe(data)

以上这篇在python环境下运用kafka对数据进行实时传输的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python通过装饰器检查函数参数数据类型的方法
Mar 13 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python 迭代器与生成器实例详解
May 18 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python实现批量图片格式转换
Jun 16 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python Flask框架模板操作实例分析
May 03 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python如何查看安装了的模块
Jun 23 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python机器学习之PCA降维算法详解
May 19 Python
kafka-python批量发送数据的实例
Dec 27 #Python
Python闭包思想与用法浅析
Dec 27 #Python
对python操作kafka写入json数据的简单demo分享
Dec 27 #Python
python消费kafka数据批量插入到es的方法
Dec 27 #Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 #Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 #Python
python 读取Linux服务器上的文件方法
Dec 27 #Python
You might like
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
javascript Window及document对象详细整理
2011/01/12 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
js绘制圆形和矩形的方法
2015/08/05 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
介绍Python中的__future__模块
2015/04/27 Python
python妹子图简单爬虫实例
2015/07/07 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
利用Python破解验证码实例详解
2016/12/08 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
python中列表的含义及用法
2020/05/26 Python
python3.7添加dlib模块的方法
2020/07/01 Python
合作协议书模板
2014/10/10 职场文书
安全保证书怎么写
2015/02/28 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技