在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 相关文章推荐
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python使用进程Process模块管理资源
Mar 05 Python
python让函数不返回结果的方法
Jun 22 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Django日志及中间件模块应用案例
Sep 10 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
python math模块的基本使用教程
Jan 16 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
php接口技术实例详解
2016/12/07 PHP
PHP实现添加购物车功能
2017/03/06 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
美国第一香水网站:Perfume.com
2017/01/23 全球购物
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
自我评价范文
2013/12/22 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
协议书格式
2014/04/23 职场文书
2014年优秀党员材料
2014/12/18 职场文书
上课说话检讨书
2015/01/27 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
vue 给数组添加新对象并赋值
2022/04/20 Vue.js