# 一些概念
"""
topic ( pykafka.topic.Topic) – 此消费者应该消费的主题
cluster ( pykafka.cluster.Cluster) – 此消费者应连接到的集群
consumer_group ( str ) – 此消费者应加入的消费者组的名称。消费者组名称在集群级别命名空间,这意味着使用相同组名称的两个消费者将被视为同一组的一部分。
fetch_message_max_bytes ( int ) – 每次获取请求时尝试获取的消息字节数
num_consumer_fetchers ( int ) – 用于进行 FetchRequests 的工作人员数量
auto_commit_enable ( bool ) – 如果为 true,则定期向 kafka 提交已从消耗 () 调用返回的消息的偏移量。要求 consumer_group不是None。
auto_commit_interval_ms ( int ) – 消费者的偏移量提交给 kafka 的频率(以毫秒为单位)。如果auto_commit_enable为False ,则忽略此设置。
queued_max_messages ( int ) – 在内部缓冲以供消费的最大消息数 pykafka.simpleconsumer.SimpleConsumer
fetch_min_bytes ( int ) – 服务器应为获取请求返回的最小数据量(以字节为单位)。如果没有足够的数据可用,请求将阻塞,直到有足够的数据可用。
fetch_error_backoff_ms ( int ) –未使用。见pykafka.simpleconsumer.SimpleConsumer。
fetch_wait_max_ms ( int ) – 如果没有足够的数据来立即满足fetch_min_bytes,服务器将在响应获取请求之前阻塞的最长时间(以毫秒为单位)。
offsets_channel_backoff_ms ( int ) – 重试失败的偏移提交和获取的退避时间。
offsets_commit_max_retries ( int ) – 偏移量提交工作者在引发错误之前应该重试的次数。
auto_offset_reset ( pykafka.common.OffsetType) – 如果偏移量超出范围怎么办。此设置指示在遇到OffsetOutOfRangeError时如何重置使用者的内部偏移计数器。
consumer_timeout_ms ( int ) – 在返回 None 之前,消费者在没有可用消息的情况下可能花费的时间(以毫秒为单位)。
rebalance_max_retries ( int ) – 在引发错误之前重新平衡应重试的次数。
rebalance_backoff_ms ( int ) – 重新平衡期间重试之间的退避时间(以毫秒为单位)。
zookeeper_connection_timeout_ms ( int ) – 消费者在与 zookeeper 建立连接时等待的最长时间(以毫秒为单位)。
zookeeper_connect ( str ) – 已弃用::2.7,3.6 逗号分隔 (ip1:port1,ip2:port2) 字符串,指示要连接的 zookeeper 节点。
zookeeper_hosts ( str ) – 要连接的 ZooKeeper 主机的 KazooClient 格式字符串。
zookeeper ( kazoo.client.KazooClient) – 连接到 Zookeeper 实例的 KazooClient。如果提供,zookeeper_connect 将被忽略。
auto_start ( bool ) – __init__ 完成后消费者是否应该开始与zookeeper 通信。如果为 false,则可以使用start()开始通信。
reset_offset_on_start ( bool ) – 消费者是否应将其内部偏移计数器重置为self._auto_offset_reset并在启动时立即提交该偏移量
post_rebalance_callback ( function ) – 在进行重新平衡时要调用的函数。这个函数应该接受三个参数:pykafka.balancedconsumer.BalancedConsumer刚刚完成重新平衡的 实例,重新平衡之前它拥有的分区字典,以及重新平衡之后它拥有的分区字典。这些字典将分区 id 映射到这些分区的最近已知的偏移量。此函数可以选择返回一个字典,将分区 id 映射到偏移量。如果是这样,消费者将在继续消费之前将其偏移量重置为提供的值。请注意,在此回调运行时 BalancedConsumer 处于定义不佳的状态,因此访问其属性(例如hold_offsets或partitions) 可能会产生令人困惑的结果。相反,回调应该真正依赖于提供的 partition-id dicts,它们是明确定义的。
use_rdkafka ( bool ) – 如果可用,使用 librdkafka 支持的消费者
compacted_topic ( bool ) – 设置为从压缩的主题中读取。强制消费者使用不太严格的消息排序逻辑,因为压缩的主题不会以严格的递增顺序提供偏移量。
members_protocol ( pykafka.membershipprotocol.GroupMembershipProtocol) – 此消费者应遵守的组成员协议
deserializer ( function ) – 定义如何反序列化从 Kafka 返回的消息的函数。具有签名 d(value, partition_key) 的函数,该函数返回 (deserialized_value, deserialized_partition_key) 的元组。传递给该函数的参数是消息值和分区键的字节表示,返回的数据应该是根据客户端代码的序列化逻辑转换的这些字段。有关库存实现,请参阅pykafka.utils.__init__。
reset_offset_on_fetch ( bool ) – fetch_offsets 期间是否更新偏移量。禁用只读用例以防止副作用。
"""
# 生产者.py
import queue
import time
from pykafka import KafkaClient
class KafkaTest(object):
"""
测试kafka常用api
"""
def __init__(self, host, topic):
self._client = KafkaClient(hosts=host)
self._topic = self._client.topics[topic.encode()]
def producer_partition(self):
"""
生产者分区查看,主要查看生产消息时offset的变化
"""
partitions = self._topic.partitions
print("查看所有分区:", partitions)
earliest_offset = self._topic.earliest_available_offsets()
print("获取最早可用的offset:", earliest_offset)
last_offset = self._topic.latest_available_offsets()
print("最近可用的offset:", last_offset)
# 同步生产消息
p = self._topic.get_producer(sync=True)
p.produce(str(time.time()).encode())
# 查看offset的变化
last_offset_new = self._topic.latest_available_offsets()
print("最新最近可用的offset:", last_offset_new)
def producer_designated_partition(self):
"""
往指定分区写消息,如果要控制打印到某个分区,
需要再获取生产者的时候指定选取函数,
并且再生成消息的时候额外指一个key
"""
def assign_patition(pid, key):
"""
指定特定分区,这里测试写入第一个分区(id=0)
:param: 分区列表
"""
print("为消息分配分区partition:", pid, key)
return pid[0]
# sync ( bool ) – 对生产的调用是否应该在返回之前等待消息发送。
# 如果为True,则如果交付给 kafka 失败,则会从produce()引发异常
# partitioner 分区器
p = self._topic.get_producer(sync=True, partitioner=assign_patition)
p.produce(str(time.time()).encode(), partition_key=b"partition_key_0")
def async_produce_message(self):
"""
异步生产消息,消息会被推到一个队列里面,
另外一个线程会在队列中消息大小满足一个阈值(min_queued_messages)
或到达一段时间(linger_ms)后统一发送,默认5s
:return:
"""
last_offset = self._topic.latest_available_offsets()
print("最近的偏移量offse=", last_offset)
# 记录最初的偏移量
old_offset = last_offset[0].offset[0]
p = self._topic.get_producer(sync=False, partitioner=lambda pid, key: pid[0])
p.produce(str(time.time()).encode())
s_time = time.time()
while True:
last_offset = self._topic.latest_available_offsets()
print("最近可用的offset=", last_offset)
if last_offset[0].offset[0] != old_offset:
e_time = time.time()
print("cont time = ", e_time - s_time)
break
time.sleep(1)
def get_produce_message_report(self):
"""
查看异步发送消息报告,默认会等待5秒后才能获得报告
:return:
"""
last_offset = self._topic.latest_available_offsets()
print("最近的偏移量offset=", last_offset)
# delivery_reports 获取消息的传递确认
p = self._topic.get_producer(sync=False, delivery_reports=True, partitioner=lambda pid, key: pid[0])
p.produce(str(time.time()).encode())
s_time = time.time()
delivery_report = p.get_delivery_report() # 必须设置delivery_reports=True才能获取反馈
e_time = time.time()
print('等待{}s, 递交报告{}'.format(e_time - s_time, delivery_report))
last_offset = self._topic.latest_available_offsets
print("最近的偏移量offset=", last_offset)
def get_produce_message_report_exc(self):
message = "test message test message1"
# 生产环境,为了达到高吞吐量,要采用异步的方式,通过delivery_reports =True来启用队列接口;
last_offset = self._topic.latest_available_offsets()
print("最近的偏移量offset=", last_offset)
producer = self._topic.get_producer(sync=False, delivery_reports=True)
producer.produce(bytes(message.encode()))
last_offset = self._topic.latest_available_offsets()
print("最近的偏移量offset=", last_offset)
try:
print("get info,直接运行速度太快,msg无法获取,直接报异常了")
msg, exc = producer.get_delivery_report(block=False)
print("msg", msg)
if exc is not None:
print('Failed to deliver msg {}: {}'.format(msg.partition_key, repr(exc)))
else:
print('Successfully delivered msg {}'.format(msg.partition_key))
except queue.Empty:
pass
except Exception as e:
print(e)
if __name__ == '__main__':
host = "192.168.0.120:9092"
topic = "trademark_info"
kafka_ins = KafkaTest(host=host, topic=topic)
# kafka_ins.producer_partition()
# kafka_ins.producer_designated_partition()
# kafka_ins.async_produce_message()
# kafka_ins.get_produce_message_report()
kafka_ins.get_produce_message_report_exc()
# 消费者.py
from pykafka import KafkaClient
class KafkaTest(object):
"""
测试kafka常用api
"""
def __init__(self, host, topic):
self._client = KafkaClient(hosts=host)
self._topic = self._client.topics[topic.encode()]
def simple_consumer(self, offset=0):
"""
消费者指定消费
:param offset:偏移量
:return:
"""
partitions = self._topic.partitions
print("查看所有分区partitions=", partitions)
last_offset = self._topic.latest_available_offsets()
print("最近的偏移量offset=", last_offset)
consumer = self._topic.get_simple_consumer(consumer_group="trademark_info",
partitions=[partitions[0]]) # 选择一个分区进行消费
offset_list = consumer.held_offsets
print("当前消费者分区offset情况{}".format(offset_list)) # 消费者拥有的分区offset的情况
consumer.reset_offsets([(partitions[0], offset)]) # 设置offset偏移值
msg = consumer.consume()
print("消费 :{}".format(msg.value.decode()))
msg = consumer.consume()
print("消费 :{}".format(msg.value.decode()))
msg = consumer.consume()
print("消费 :{}".format(msg.value.decode()))
offset = consumer.held_offsets # 返回从分区 id 到每个分区的持有偏移量的映射
print("当前消费者分区offset情况{}".format(offset_list)) # 返回从分区 id 到每个分区的持有偏移量的映射
def balance_consumer(self, offset=0):
"""
使用balance consumer 去消费 kafka
:param offset:
:return:
"""
# managed=True 设置后,使用新式reblance分区方法,不需要使用zk,
# 而False是通过zk来实现reblance的需要使用zk
consumer = self._topic.get_balanced_consumer(consumer_group="trademark_info", managed=True)
partitions = self._topic.partitions
print("分区 {}".format(partitions))
earliest_offsets = self._topic.earliest_available_offsets()
print("最早可用offset {}".format(earliest_offsets))
last_offsets = self._topic.latest_available_offsets()
print("最近可用offset {}".format(last_offsets))
offset = consumer.held_offsets
print("当前消费者分区offset情况{}".format(offset))
while True:
msg = consumer.consume()
offset = consumer.held_offsets
print("{}, 当前消费者分区offset情况{}".format(msg.value.decode(), offset))
if __name__ == '__main__':
host = "192.168.0.120:9092"
topic = "trademark_info"
kafka_ins = KafkaTest(host=host, topic=topic)
kafka_ins.simple_consumer()
# kafka_ins.balance_consumer()
相关推荐
EPICS Phoebus手册1
EPICS客户端phoebus 手册
kafka简介以及pykafka的基本操作
“Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日...
从PWM到正弦波:RC低通滤波器的魔法转换之旅
本文详细介绍了如何利用RC低通滤波器将STM32F103生成的PWM信号转换为高质量正弦波的技术原理与实践方法。通过分析滤波器设计、参数计算、硬件实现及Proteus仿真验证,为嵌入式开发者提供了一套完整的PWM转正弦波解决方案,适用于电机控制、音频信号生成等多种应用场景。
python3-使用pykafka模块连接kafka
前言 最近有个日志需求,因为太过频繁,且还要有通过日志的频率来启动报警机制,于是想到使用kafka来做,下面就主要记录一下pthon怎么使用kafaka,我这边使用的pyKafka,至于什么是kafka,kafka的原理以及自身的形成机制或搭建之类的,请自行百度一番即可,这边只记录代码 先贴下 pykafka的官方API文档地址 正文 1、导入模块 from pykafka import KafkaClient 2、实例化 client = KafkaClient(hosts="host:port")
Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题
Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling
计算pi小数点后10000位
数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...
python操作Kafka简单使用
一. kafka-python和pykafka区别: https://blog.youkuaiyun.com/qq_38110368/article/details/108615786 与confluent_kafka优劣: -- 二. 相关概念: broker 消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群,相当于物理层面上的一台服务器。 topic 消息的主题,一个broker可有多个topi...
第2章: MMU Notifier 全局通知器的核心原理⭐
摘要 MMU Notifier机制是Linux内核中用于处理内存地址空间变化通知的关键框架。其设计遵循解耦与标准化、最小侵入性、高性能和安全性四大原则,采用三层架构实现上层应用、核心层与内存管理层的协作。框架提供两种通知模型:全局订阅的mmu_notifier和区间订阅的mmu_interval_notifier,分别适用于KVM虚拟化和GPU共享虚拟内存等不同场景。核心数据结构mmu_notifier_ops定义了设备驱动需要实现的回调函数集合,包括进程退出处理、页面老化管理、地址范围失效通知等功能。
python 读写kafka
11qwe
HTML蓝色动态爱心(完整代码)
HTML语言实现蓝色动态爱心的完整代码。
从 Chat 提示词到可运行 Fiori 应用,ADT for VS Code 正在把 RAP 开发带进 Agent 时代
本文探讨了在VS Code中使用AI辅助进行ABAP RAP开发的新模式。文章指出,传统RAP开发需要手工创建数据库表、CDS视图、行为定义等十多个关联对象,命名和关联关系容易出错。现在通过GitHub Copilot Agent Mode配合ADT MCP Server,开发者可用自然语言描述业务场景直接生成完整的RAP业务对象。这种生成式开发的核心价值在于:1)通过标准化工具接口(MCP)连接ABAP后端,确保生成符合规范的RAP对象;2)能正确处理多实体组合场景下的命名一致性和关联关系;3)保持生成结
python3连接kafka模块pykafka生产者简单封装
1.1安装模块 pip install pykafka 1.2基本使用 # -* coding:utf8 *- from pykafka import KafkaClient host = 'IP:9092, IP:9092, IP:9092' client = KafkaClient(hosts = host) # 生产者 topicdocu = client.topics['...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
pykafka简单应用
简单的pykafka生产/消费/再生产过程;
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
python kafka生产者_python3连接kafka模块pykafka生产者简单封装代码
1.1安装模块pip install pykafka1.2基本使用# -* coding:utf8 *-from pykafka import KafkaClienthost = "IP:9092, IP:9092, IP:9092"client = KafkaClient(hosts = host)# 生产者topicdocu = client.topics["my-topic"]produce...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
python 使用pykafka连接kafka生产消息
开始使用了kafka-python, 发现对gevent协程支持不太好,就选择了pykafka, 异步也是使用协程greenlet。了解gevent的应该都知道,gevent是greenlet的升级。 安装非常简单,(我是py2.7)直接pip: pip install pykafka 下面直接上代码:生产者的代码 import Queue import json from datetime import datetime import traceback import random imp..
使用pykafka读取实时数据小例子
使用pykafka读取实时数据 import sys from KafkaConfig import Config from pykafka import KafkaClient from pykafka.balancedconsumer import BalancedConsumer from pykafka.simpleconsumer import OwnedPartition,
记pykafka的一个问题
pykafka的使用问题 由于业务需要,需使用kafka,由于底层使用的是python,要是使用python的API 现有的包有kafka-python和pykafka,前者需要自己手动管理消费者的offset,比较麻烦,pykafka可使用zk管理offset,相对简单 pykafka Demo 在选定号方案之后,一个简单的Demo如下: # encoding:utf-8 """ 使用p...
通过pykafka接收Kafka消息队列
没有Kafka环境,所以也没有进行验证。感觉今后应该能用到,所以借抄在此,备查。 pykafka使用示例,自动消费最新消息,不重复消费: # -* coding:utf8 *- from pykafka import KafkaClient host = '192.168.200.38' client = KafkaClient(hosts="%s:9092" % host) print
kafka-python 停止消费
使用kafka-python时,不消费数据,也没有异常 换为pykafka库后解决 使用例子 from pykafka import KafkaClient client = KafkaClient(hosts='127.0.0.1:9092') topic = client.topics['logsget'] consumer = topic.get_simpl
Yandex SHRI 2018 入学测试实战解析:用 Express + Sequelize + GraphQL 编写员工会议信息应用并完成全量排错(entrance-task-1)
本文围绕 Yandex 前端开发学院(Школа разработки интерфейсов, SHRI)2018 年秋季入学测试的第一道任务([entrance-task-1.md](https://link.gitcode.com/i/e0363b4cffe53bf1f2bb172161b3518e))展开:它要求候选人在一个基于 Node.js 8、由 express、sequelize、
python操作pykafka
from pykafka import KafkaClient client = KafkaClient(hosts ="127.0.0.1:9092") #可接受多个client #查看所有的topic topic = client.topics[b'test'] print(topic) #选择一个topic message ="test message test message" #生产ka...
使用Python向kafka中写入数据
第一步安装pykafka pip install pykafka PyKafka — pykafka 2.8.1-dev.2 documentation 第二步编写写入相应主题的数据代码, 这里只是demo from pykafka import KafkaClient client = KafkaClient(hosts="192.168.220.202:9092,192.168.220.203:9092,192.168.220.204:9092") topic = client.top
python发送zookeeper的kafka集群消息
python发kafka消息 目前技术一般采用基于zk的kafka集群,传统直连方式不可取。因此采用pykafka三方类库来进行消息的发送和接收,本文实现了同步sync和异步async的消息发送produce,接收消息consume部分topic查询不到消息,欢迎技术同学帮我补充(本文也是参考网上文章,基于python3.7) 直接上代码(实践可用) rom pykafka import Ka...
python3.5读取kafka中的数据
安装包 pykafka 代码如下: from pykafka import KafkaClient client = KafkaClient(hosts="test43:9092") print(client.topics) topic = client.topics[b'rokid'] #topic名称 consumer = topic.get_simple_con...
kafka生产者——python Api发送
kafka生产者——python Api使用一、环境简介 一、环境简介 机器:13-inch, M1, 2020 编码:pycharm 环境:python3.8.10 kafka包:pykafka (pip install pykafka) 如果你也是以上的环境那么该案例对你有一定的参考意义! 以下内容为参考:博主文章实践的内容 ...
3949



被折叠的 条评论
为什么被折叠?



