在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实现NB-IoT模块远程控制
Jun 20 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
详解python中sort排序使用
Mar 23 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
关于python字符串方法分类详解
Aug 20 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
Python中如何添加自定义模块
Jun 09 Python
python如何爬取网页中的文字
Jul 28 Python
Python爬取某平台短视频的方法
Feb 08 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版自动生成文章摘要
2008/07/23 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
使用python解析xml成对应的html示例分享
2014/04/02 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python 对象中的数据类型
2017/05/13 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Python中Selenium模块的使用详解
2020/10/09 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
元旦晚会邀请函
2014/01/27 职场文书
房屋出售协议书
2014/04/10 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
公司人事任命通知
2015/04/20 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏