在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 threading模块操作多线程介绍
Apr 08 Python
python发送邮件功能实现代码
Jul 15 Python
Python脚本实时处理log文件的方法
Nov 21 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
python删除某个字符
Mar 19 Python
python实现抠图给证件照换背景源码
Aug 20 Python
在Python中通过threshold创建mask方式
Feb 19 Python
基于Tensorflow一维卷积用法详解
May 22 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
一篇文章弄懂Python中的内建函数
Aug 07 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基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
vuex实现购物车功能
2020/06/28 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
python实现Adapter模式实例代码
2018/02/09 Python
Python打印输出数组中全部元素
2018/03/13 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python requests 测试代理ip是否生效
2018/07/25 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
django 外键创建注意事项说明
2020/05/20 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
Python3获取cookie常用三种方案
2020/10/05 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
市政施工员自我鉴定
2014/01/15 职场文书
教师自我反思材料
2014/02/14 职场文书
霸王洗发水广告词
2014/03/14 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
旅游投诉信范文
2015/07/02 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技