在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 09 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
为什么称python为胶水语言
Jun 16 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
matplotlib 三维图表绘制方法简介
Sep 20 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 Python
解决python的空格和tab混淆而报错的问题
Feb 26 Python
Python几种酷炫的进度条的方式
Apr 11 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
Python中操作MySQL入门实例
2015/02/08 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python使用thrift教程的方法示例
2019/03/21 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
俄语专业毕业生推荐信
2013/10/28 职场文书
自我评价的范文
2014/02/02 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
街道务虚会发言材料
2014/10/20 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
各种货币符号快捷输入
2022/02/17 杂记