python 发送kafka大体有三种方式

1 发送并忘记(不关注是否正常到达,不对返回结果做处理)

1 import pickle
2 import time
3 from kafka import KafkaProducer
4
5 producer = KafkaProducer(bootstrap_servers=['ip:9092'],
6 key_serializer=lambda k: pickle.dumps(k),
7 value_serializer=lambda v: pickle.dumps(v))
8
9 start_time = time.time()
10 for i in range(0, 10000):
11 print('------{}---------'.format(i))
12 future = producer.send('test_topic', key='num', value=i, partition=0)
13
14 # 将缓冲区的全部消息push到broker当中
15 producer.flush()
16 producer.close()
17
18 end_time = time.time()
19 time_counts = end_time - start_time
20 print(time_counts)

2  同步发送(通过get方法等待Kafka的响应,判断消息是否发送成功)

1 import pickle
2 import time
3 from kafka import KafkaProducer
4 from kafka.errors import kafka_errors
5
6 producer = KafkaProducer(
7 bootstrap_servers=['ip:9092'],
8 key_serializer=lambda k: pickle.dumps(k),
9 value_serializer=lambda v: pickle.dumps(v)
10 )
11
12 start_time = time.time()
13 for i in range(0, 10000):
14 print('------{}---------'.format(i))
15 future = producer.send(topic="test_topic", key="num", value=i)
16 # 同步阻塞,通过调用get()方法进而保证一定程序是有序的.
17 try:
18 record_metadata = future.get(timeout=10)
19 # print(record_metadata.topic)
20 # print(record_metadata.partition)
21 # print(record_metadata.offset)
22 except kafka_errors as e:
23 print(str(e))
24
25 end_time = time.time()
26 time_counts = end_time - start_time
27 print(time_counts)

3  异步发送+回调函数(消息以异步的方式发送,通过回调函数返回消息发送成功/失败)

1 import pickle
2 import time
3 from kafka import KafkaProducer
4
5 producer = KafkaProducer(
6 bootstrap_servers=['ip:9092'],
7 key_serializer=lambda k: pickle.dumps(k),
8 value_serializer=lambda v: pickle.dumps(v)
9 )
10
11
12 def on_send_success(*args, **kwargs):
13 """
14 发送成功的回调函数
15 :param args:
16 :param kwargs:
17 :return:
18 """
19 return args
20
21
22 def on_send_error(*args, **kwargs):
23 """
24 发送失败的回调函数
25 :param args:
26 :param kwargs:
27 :return:
28 """
29
30 return args
31
32
33 start_time = time.time()
34 for i in range(0, 10000):
35 print('------{}---------'.format(i))
36 # 如果成功,传进record_metadata,如果失败,传进Exception.
37 producer.send(
38 topic="test_topic", key="num", value=i
39 ).add_callback(on_send_success).add_errback(on_send_error)
40
41 producer.flush()
42 producer.close()
43
44 end_time = time.time()
45 time_counts = end_time - start_time
46 print(time_counts)

 除此之外,还能发送压缩数据流

def gzip_compress(msg_str):
try:
buf = StringIO.StringIO()
with gzip.GzipFile(mode='wb', fileobj=buf) as f:
f.write(msg_str)
return buf.getvalue()
except BaseException, e:
print ("Gzip压缩错误" + e) def gzip_uncompress(c_data):
try:
buf = StringIO.StringIO(c_data)
with gzip.GzipFile(mode='rb', fileobj=buf) as f:
return f.read()
except BaseException, e:
print ("Gzip解压错误" + e) def send_kafka(topic_name, msg, key=None):
if key is not None:
producer = KafkaProducer(bootstrap_servers=["fdw8.fengjr.inc:9092","fdw9.fengjr.inc:9092","fdw10.fengjr.inc:9092"],
key_serializer=gzip_compress, value_serializer=gzip_compress)
r = producer.send(topic_name, value=msg, key=key)
else:
producer = KafkaProducer(bootstrap_servers=["fdw8.fengjr.inc:9092","fdw9.fengjr.inc:9092","fdw10.fengjr.inc:9092"],
value_serializer=gzip_compress)
r = producer.send(topic_name, value=msg)
# producer.flush(timeout=5)
producer.close(timeout=5)
return r

  

python 发送kafka的更多相关文章

  1. Mac下Python与Kafka的配合使用

    安装并配置Kafka 安装 # brew install kafka 配置 """ zookeeper配置文件/usr/local/etc/kafka/zookeeper ...

  2. python调用kafka服务(使用kafka-python库)

    试验环境: CDH 5.15.1 CentOS 7 Python 3.7.0 kafka 1.1.1 kafka-python :https://pypi.org/project/kafka-pyth ...

  3. 使用python操作kafka

    使用python操作kafka目前比较常用的库是kafka-python库 安装kafka-python pip3 install kafka-python 生产者 producer_test.py ...

  4. kafka实战教程(python操作kafka),kafka配置文件详解

    kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...

  5. 使用python发送简单的邮件

    from:http://blog.csdn.net/zhaoweikid/article/details/125898 前些时间,论坛上有人讨论怎么用python发送需要认证的邮件,我在我的FreeB ...

  6. [Python] 发送email的几种方式

    python发送email还是比較简单的,能够通过登录邮件服务来发送,linux下也能够使用调用sendmail命令来发送,还能够使用本地或者是远程的smtp服务来发送邮件,无论是单个,群发,还是抄送 ...

  7. python发送post和get请求

    python发送post和get请求 get请求: 使用get方式时,请求数据直接放在url中. 方法一. import urllib import urllib2 url = "http: ...

  8. python 发送附件至邮箱

    python 发送附件至邮箱 import smtplibfrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIME ...

  9. python 发送post和get请求

    摘自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201231085444250/ 测试用CGI,名字为test.py,放在ap ...

随机推荐

  1. Java 集合基础详细介绍

    一.Java集合框架概述 集合.数组都是对多个数据进行存储操作的结构,简称Java容器.此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt, .jpg, .avi,数据库中).Jav ...

  2. 搭建一套简单的web服务器,记录实验过程

    搭建web服务器 一.实验内容: 实验要求: 1.完成一个简单的web服务器,web服务器从mysql里读取数据进行返回 2.Mysql需要有一个单独的数据盘,每个mysql虚拟机的磁盘挂载方式需要都 ...

  3. 自定义springmvc参数解析器

    实现spring HandlerMethodArgumentResolver接口 通过使用@JsonArg自定义注解来解析json数据(通过fastjson的jsonPath),支持多个参数(@Req ...

  4. RedHat下yum配置为本地或者CentOs

    由于RedHat公司将yum源作为服务给用户提供,所以不能free给大家确实挺失望的,不过还好能够在RedHat上配置本地的Yum源,或者CentOS的Yum源. 这里提供两种方式,一种是配置本地的, ...

  5. chrome插件报错原因

    Chrome报错提示Unchecked runtime.lastError: The message port closed before a response was received. 出错原因: ...

  6. vue 自己写的一个日历

    样式: //quanbu全部代码 <template> <div class="priceListContent clearfix"> <!-- 顶部 ...

  7. legend2---数据字段没有默认值错误:SQLSTATE[HY000]: General error: 1364 Field 'h_21_injury_limit' doesn't have a default value

    legend2---数据字段没有默认值错误:SQLSTATE[HY000]: General error: 1364 Field 'h_21_injury_limit' doesn't have a ...

  8. 监听浏览器返回键、后退、上一页事件(popstate)操作返回键

    在WebApp或浏览器中,会有点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面.确认离开页面或执行一些其它操作的需求.可以使用 popstate 事件进行监听返回.后退.上一页操作. 一 ...

  9. 搜索引擎算法研究专题六:HITS算法

    搜索引擎算法研究专题六:HITS算法 2017年12月19日 ⁄ 搜索技术 ⁄ 共 1240字 ⁄ 字号 小 中 大 ⁄ 评论关闭   HITS(Hyperlink-Induced Topic Sea ...

  10. 【1】mongoDB 的安装及启动

    MongoDB是一个面向文档(document-oriented)的数据库,不是关系型数据库.与关系型数据库相比,面向文档的数据库没有"行"的概念,取而代之的是"文档&q ...