python使用kafka原理详解真实完整版_Kafka快速入门(十二)——Python客户端

Kafka快速入门(十二)——Python客户端

一、confluent-kafka

1、confluent-kafka简介

confluent-kafka是Python模块,是对librdkafka的轻量级封装,支持Kafka 0.8以上版本。本文基于confluent-kafka 1.3.0编写。

GitHub地址:

https://github.com/confluentinc/confluent-kafka-python

2、confluent-kafka特性

(1)可靠。confluent-kafka是对广泛应用于各种生产环境的librdkafka的封装,使用Java客户端相同的测试集进行测试,由Confluent进行支持。

(2)性能。性能是一个关键的设计考虑因素,对于较大的消息,最大吞吐量与Java客户机相当(Python解释器的开销影响较小),延迟与Java客户端相当。

(3)未来支持。Coufluent由Kafka创始人创建,致力于构建以Apache Kafka为核心的流处理平台。确保核心Apache Kafka和Coufluent平台组件保持同步是当务之急。

3、confluent-kafka安装

创建confluent源:

进入/etc/yum.repos.d目录创建confluent.repo文件:

[Confluent.dist]

name=Confluent repository (dist)

baseurl=https://packages.confluent.io/rpm/5.4/7

gpgcheck=1

gpgkey=https://packages.confluent.io/rpm/5.4/archive.key

enabled=1

[Confluent]

name=Confluent repository

baseurl=https://packages.confluent.io/rpm/5.4

gpgcheck=1

gpgkey=https://packages.confluent.io/rpm/5.4/archive.key

enabled=1

安装:

sudo yum clean all && sudo yum install confluent-community-2.12

sudo yum install librdkafka-devel python-devel

pip install confluent-kafka

安装AvroProducer、AvroConsumer:

pip install "confluent-kafka[avro]"

二、coufluent-kafka客户端API

1、confluent_kafka.Consumer

Consumer(config)

使用指定的配置dict创建Consumer实例。

Consumer.assign(partitions)

由指定TopicPartition列表设置Consumer的分区分配策略,启动消费。如果对关闭的Consumer调用本函数会抛出RuntimeError。

Consumer.assignment()

返回当前分区分配策略,返回list(TopicPartition)

Consumer.close()

关闭和终止Consumer实例,关闭Consumer实例会执行以下操作:停止消费;提交位移(如果enable.auto.commit设置为False会抛出异常)、离开Consumer Group。

Consumer.commit([message=None][, offsets=None][, asynchronous=True])

提交一条消息或位移列表,message和offsets是互斥参数,如果没有指定参数,会使用当前分区分配策略的offsets。

message:提交消息的位移加1

offsets:要提交的TopicPartition列表

asynchronous:是否异步提交。异步提交会立即返回None。如果设置为False,会阻塞直到提交成功或失败,如果提交成功,会返回提交的offsets。注意:提交成功,需要对返回的TopicPartition列表的每个TopicPartition的err字段进行检查,TopicPartition可能会提交失败。

Consumer.committed(partitions[, timeout=None])

获取已提交的分区的offsets。

partitions:TopicPartition列表

timeout:请求超时,单位秒。

返回TopicPartition列表或错误集

Consumer.consume([num_messages=1][, timeout=-1])

消费消息,调用回调函数,返回消息列表,如果超时,返回空。

应用程序必须检查返回Message的error方法,正常Message的error返回None。

num_messages:返回的最大消息数量,默认为1

timeout:阻塞等待消息、事件、回调函数的最大时间

Connsumer.get_watermark_offsets(partition[, timeout=None][, cached=False])

获取分区的低水位和高水位

partition:TopicPartition对象

Timeout:请求超时,

Cached:是否替换正在查询的Broker使用的缓存信息。

成功返回低水位和高水位的元组,超时返回None。

Consumer.list_topics([topic=None][, timeout=-1])

请求集群的元数据信息。

topic:字符串类,如果指定,只请求本Topic的信息,否则返回集群的所有Topic。

timeout:超时前的最大响应时间,-1表示永不超时。

返回ClusterMetadata类型

Consumer.offsets_for_times(partitions[, timeout=None])

对指定的分区列表根据时间戳查询offsets。

返回每个分区的offsets大于等于指定分区列表的时间戳的位移。

partitions:TopicPartition列表

timeout:请求超时时间。

Consumer.pause(partitions)

暂停指定分区列表的分区的消费

Consumer.poll([timeout=None])

消费消息,调用回调函数,返回事件。

应用程序必须检查返回的Message对象的error()方法,如果是正常消息,返回None。

返回Message对象回None。

Consumer.position(partitions)

获取指定分区列表分区的位移

partitions:分区列表

返回带位移的TopicPartition列表,当前位移是最新消费消息的位移加1。

Consumer.resume(partitions)

恢复指定分区列表的分区的消费

partitions:要恢复的TopicPartitio列表

Consumer.seek(partition)

定位分区的消费位移到offset。offset可以是绝对值,也可以是逻辑位移OFFSET_BEGINNING。本函数只用于活跃消费分区更新消费位移,要设置分区的起始位移可以使用assign函数。

Consumer.store_offsets([message=None][, offsets=None])

存储一条消息的位移或位移列表。

message和offsets是互斥参数。

被存储的位移会根据auto.commit.interval.m参数值被提交,使用本函数时enable.auto.offset.store参数必须被设置为False。

message:存储message的位移加1。

offsets:要存储位移的TopicPartition列表

Consumer.subscribe(topics[, on_assign=None][, on_revoke&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值