在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 相关文章推荐
在Django的模型中添加自定义方法的示例
Jul 21 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
PyQt5每天必学之组合框
Apr 20 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
由面试题加深对Django的认识理解
Jul 19 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
php数组指针操作详解
2017/02/14 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
js实现内置计时器
2019/12/16 Javascript
Python表示矩阵的方法分析
2017/05/26 Python
Python正则捕获操作示例
2017/08/19 Python
Python实现多属性排序的方法
2018/12/05 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python多维数组分位数的求取方式
2020/03/03 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
keras:model.compile损失函数的用法
2020/07/01 Python
Python接收手机短信的代码整理
2020/08/02 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书