在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 25 Python
python脚本监控docker容器
Apr 27 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
Linux 修改Python命令的方法示例
Dec 03 Python
Python实现多进程的四种方式
Feb 22 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
解决python -m pip install --upgrade pip 升级不成功问题
Mar 05 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
如何用python处理excel表格
Jun 09 Python
python判断变量是否为列表的方法
Sep 17 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
在字符串中把网址改成超级链接
2006/10/09 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
Python assert语句的简单使用示例
2019/07/28 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
公司离职证明范本
2014/01/13 职场文书
高二地理教学反思
2014/01/24 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
中学生检讨书范文
2014/11/03 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
生日赠语
2015/06/23 职场文书
早上好问候语大全
2015/11/10 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
KVM基础命令详解
2022/04/30 Servers