from kafka import KafkaConsumer,TopicPartition
import json
scrapy_kafka_hosts = ["ip:端口", "ip:端口"]
topic = 'wangliang_test'
consumer = KafkaConsumer(bootstrap_servers=scrapy_kafka_hosts,
group_id='', # 消费组
value_deserializer=lambda m: json.loads(m.decode('ascii')), # 消费json 格式的消息
auto_offset_reset='latest', # latest 最新的偏移量,默认最新的 # earliest 最早的偏远量,在还一个组时候才可以使用最早的
enable_auto_commit=True, # 是否开启自动提交 默认开启
auto_commit_interval_ms = 6000 # 提交偏移量的时间间隔,默认5000ms = 5 秒
)
consumer.subscribe([topic]) # 消息的主题,可以指定多个
print(consumer.partitions_for_topic(topic))
# print(consumer.topics()) #获取主题列表
# print(consumer.subscription()) #获取当前消费者订阅的主题
# print(consumer.assignment()) #获取当前消费者topic、分区信息
# print(consumer.beginning_offsets(consumer.assignment())) #获取当前消费者可消费的偏移量 consumer.assign([
TopicPartition(topic=topic, partition=0),
TopicPartition(topic=topic, partition=1),
TopicPartition(topic=topic, partition=3)
]) # 该命令与 subscribe 操作只能存在一个 表示指定主题和分区 获取 consumer 消息 # print(consumer.assignment()) #获取当前消费者topic、分区信息
consumer.seek(TopicPartition(topic=topic, partition=0), 1) # 指定起始offset为12 1表示offset 表示offset 开始连接
# consumer.seek(TopicPartition(topic=topic, partition=1), 0) # 可以注册多个分区,此分区从第一条消息开始接收
consumer.seek(TopicPartition(topic=topic, partition=3), 0) # 没有注册的分区上的消息不会被消费 for msg in consumer:
print(msg)
recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
print(recv)
print(msg.value["name"],msg.value["age"])

可以指定分区和消费者消费组和管道时间控制,消费数据。

from kafka import KafkaProducer, KafkaConsumer, TopicPartition
import time class ConsumerForKFK(object):
_MESSAGE_NAME = 'wangliang_test' def __init__(self, kafkahost, client_id):
self.kafkaHost = kafkahost
self.group_id = client_id @property
def consumer_client(self, group_id=None):
return KafkaConsumer(
bootstrap_servers=self.kafkaHost,
# client_id = self.client_id,
group_id=self.group_id,
auto_offset_reset="latest"
# 若不指定 consumer_timeout_ms,默认一直循环等待接收,若指定,则超时返回,不再等待
# consumer_timeout_ms : 毫秒数
# consumer_timeout_ms=5000
) def consumer_seek(self, partition=None, partition_all=None, offset_time=None):
partition_number = range(partition_all) if partition_all else partition
consumer = self.consumer_client
Partition_list = []
for i in partition_number:
Partition_list.append(TopicPartition(topic=self._MESSAGE_NAME, partition=i))
consumer.assign(Partition_list)
print(consumer.assignment()) # 获取当前消费者topic、分区信息
if offset_time:
for Partition in Partition_list:
consumer.seek(Partition, 0)
# 发送到指定的消息主题(异步,不阻塞)
for msg in consumer: # 迭代器,等待下一条消息 print(int(time.time()) - int(msg.timestamp / 1000))
if int(time.time()) - int(msg.timestamp / 1000) <= offset_time: # 打印消息
print(msg)
else:
for msg in consumer: # 迭代器,等待下一条消息
print(msg) scrapy_kafka_hosts = ["ip:端口", "ip:端口"]
topic = 'wangliang_test'
cl = ConsumerForKFK(scrapy_kafka_hosts, "")
cl.consumer_seek(
partition=[1, 2],
# partition_all=3,
offset_time=3000
)

消费者学习   https://www.jianshu.com/p/c89997867d48

Python往kafka生产消费数据  https://www.cnblogs.com/longsongpong/p/11010195.html

python操作kafka实践 https://www.cnblogs.com/small-office/p/9399907.html

kafka消费者的更多相关文章

  1. kafka消费者客户端(0.9.0.1API)

    转自:http://orchome.com/203 kafka客户端从kafka集群消费消息(记录).它会透明地处理kafka集群中服务器的故障.它获取集群内数据的分区,也和服务器进行交互,允许消费者 ...

  2. Kafka消费者-从Kafka读取数据

    (1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...

  3. Python 基于pykafka简单实现KAFKA消费者

    基于pykafka简单实现KAFKA消费者   By: 授客 QQ:1033553122         1.测试环境 python 3.4 zookeeper-3.4.13.tar.gz 下载地址1 ...

  4. Kafka集群安装部署、Kafka生产者、Kafka消费者

    Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...

  5. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  6. kafka 消费者 timeout 6000

    kafka 消费者 timeout 6000 1:查看zookeeper 的状态,kafka默认是自带zookeeper配置,我建议安装单独的zookeeper  服务,并且配置文件也很简单..直接改 ...

  7. Kafka消费者APi

    Kafka客户端从集群中消费消息,并透明地处理kafka集群中出现故障服务器,透明地调节适应集群中变化的数据分区.也和服务器交互,平衡均衡消费者. public class KafkaConsumer ...

  8. kafka 消费者offset记录位置和方式

    我们大家都知道,kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同. 首先来说说消费者如果是根据javaapi来消费,也就是[kafka.jav ...

  9. JAVA封装消息中间件调用二(kafka消费者篇)

    上一遍我简单介绍了kafka的生成者使用,调用方式比较简单,今天我给大家分享下封装kafka消费者,作为中间件,我们做的就是最大程度的解耦,使业务方接入我们依赖程度降到最低. 第一步,我们先配置一个消 ...

  10. kafka消费者客户端

    Kafka消费者 1.1 消费者与消费者组 消费者与消费者组之间的关系 ​ 每一个消费者都隶属于某一个消费者组,一个消费者组可以包含一个或多个消费者,每一条消息只会被消费者组中的某一个消费者所消费.不 ...

随机推荐

  1. SpringBean的工作原理

    在 Spring 中,那些组成应用程序的主体及由 Spring IOC 容器所管理的对象,被称之为 bean.简单地讲,bean 就是由 IOC 容器初始化.装配及管理的对象,除此之外,bean 就与 ...

  2. 【Unsolved】线性时间选择算法的复杂度证明

    线性时间选择算法中,最坏情况仍然可以保持O(n). 原因是通过对中位数的中位数的寻找,保证每次分组后,任意一组包含元素的数量不会大于某个值. 普通的Partition最坏情况下,每次只能排除一个元素, ...

  3. UE4 RHI与条件式编译

    RHI即RenderHardwareInterface, 即渲染硬件接口, 是UE为实现跨平台而实现的一套API. 每个RHI接口都为OpenGL, Vulkan, DX11等做了不同的实现. 在引擎 ...

  4. Own MusicPlayer隐私策略

    本地音乐播放器 此为Own MusicPlayer本地音乐播放器的隐私策略,本隐私策略内容会不定期更新,以最新内容为主. 若您已经阅读并了解以下内容后,并继续使用该软件,即表示您已同意该协议. 访问权 ...

  5. 《MIT 6.828 Lab 1 Exercise 11》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 11. 题目 The above exercise should give you the information you need ...

  6. Spring mybatis源码篇章-动态SQL节点源码深入

    通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-动态SQL基础语法以及原理 前话 前文描述到通过mybatis默认的解析驱动类org.apache.ibat ...

  7. [转帖]Vim全键盘操作

    https://www.cnblogs.com/pzqu/p/11416436.html Vim脱离鼠标第一步 平时不可缺少的会用到vim,但是避免不了鼠标,事实上,省略鼠标是完全可以的,没有想像中那 ...

  8. 将一个整数数组先按照因子数量排序,再按照数字大小排序,输出第k个数

    同小米OJ比赛题:现在有 n 个数,需要用因子个数的多少进行排序,因子个数多的排在后面,因子个数少的排在前面,如果因子个数相同那么就比较这个数的大小,数大的放在后面,数小的放在前面.现在让你说出排序之 ...

  9. (十七)使用JDBC进行批处理

    目录 业务场景: 第一种方式 第二种方式 批处理中的 update() 方法 注意事项 备注: 业务场景: 当需要向数据库中发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的 ...

  10. 文件锁-fcntl flock lockf

    这三个函数的作用都是给文件加锁,那它们有什么区别呢? 首先flock和fcntl是系统调用,而lockf是库函数.lockf实际上是fcntl的封装,所以lockf和fcntl的底层实现是一样的,对文 ...