Python 使用kafka 0.8.2.0跟踪主题大小和消费者滞后
自从卡夫卡0.8.2.0以来,跟踪消费者滞后和话题大小似乎变得非常困难 如何跟踪卡夫卡中的偏移量(主题大小)和滞后?当制作人插入消息时,您是否会在某处增加计数器,当消费者确认消息时,是否会增加另一个计数器 我正在使用-但是所有关于主题大小的指标总是Python 使用kafka 0.8.2.0跟踪主题大小和消费者滞后,python,apache-kafka,Python,Apache Kafka,自从卡夫卡0.8.2.0以来,跟踪消费者滞后和话题大小似乎变得非常困难 如何跟踪卡夫卡中的偏移量(主题大小)和滞后?当制作人插入消息时,您是否会在某处增加计数器,当消费者确认消息时,是否会增加另一个计数器 我正在使用-但是所有关于主题大小的指标总是0,出于某种原因,这可能是他们的错误报告,但是你怎么做呢 我们的消费者和生产者是使用python编写的,他们声明不支持ConsumerCoordinator offset API,所以我已经准备了一个查询zookeeper并将这些指标发送到statsd
0
,出于某种原因,这可能是他们的错误报告,但是你怎么做呢
我们的消费者和生产者是使用python编写的,他们声明不支持ConsumerCoordinator offset API,所以我已经准备了一个查询zookeeper并将这些指标发送到statsd实例的解决方案(看起来很尴尬),但我仍然缺少主题大小指标
我们使用collectd收集系统指标,我没有使用JMX的经验,在collectd中配置它似乎非常复杂,我已经尝试了几次,所以我找到了一些不这样做的方法
如果您有任何意见,我很想听听,即使是:“这属于x stackexchange站点”如果我理解正确,您可以从
获取响应中使用高水位偏移量
。这样,您将知道分区末尾的偏移量是多少,并能够将其与当前确认的偏移量或此FetchResponse
中最后一条消息的偏移量进行比较
详细信息您是否已尝试使用它来监控消费者延迟。它适用于0.8.2.0这是代码片段,请确保在active controller中运行此程序。
引导服务器是活动的控制器IP
client = KafkaAdminClient(bootstrap_servers=BOOTSTRAP_SERVERS, request_timeout_ms=300)
list_groups_request = client.list_consumer_groups()
for group in list_groups_request:
if group[1] == 'consumer':
list_mebers_in_groups = client.describe_consumer_groups([group[0]])
(error_code, group_id, state, protocol_type, protocol, members) = list_mebers_in_groups[0]
if len(members) !=0:
for member in members:
(member_id, client_id, client_host, member_metadata, member_assignment) = member
member_topics_assignment = []
for (topic, partitions) in MemberAssignment.decode(member_assignment).assignment:
member_topics_assignment.append(topic)
for topic in member_topics_assignment:
consumer = KafkaConsumer(
bootstrap_servers=BOOTSTRAP_SERVERS,
group_id=group[0],
enable_auto_commit=False
)
consumer.topics()
for p in consumer.partitions_for_topic(topic):
tp = TopicPartition(topic, p)
consumer.assign([tp])
committed = consumer.committed(tp)
consumer.seek_to_end(tp)
last_offset = consumer.position(tp)
if last_offset != None and committed != None:
lag = last_offset - committed
print "group: {} topic:{} partition: {} lag: {}".format(group[0], topic, p, lag)
有人能说MemberAssignment是从哪个模块导入的吗
对于MemberAssignment中的(主题、分区)。decode(member_assignment)。assignment:我将您的答案标记为我的答案,因为您首先来到这里,而且它也是正确的。我最终创建了一个程序来跟踪我们的消费者从Zookeeper获得的补偿,因为kafka python仍然在使用这个程序。这个解决方案的好处是可以很容易地将结果导入我们的graphite设置:)非常感谢您的帮助!这很奇怪。我从0.8.2.0之前就安装了它,但升级后它一直不起作用,但我只是想了想,然后再试一次,现在它在没有任何更新的情况下工作得很好……KafkaOffsetMonitor似乎无法与简单的使用者一起工作,因为它试图从zookeeper中检索分区所有者,而zookeeper似乎只由高级使用者设置。我想。。。YMMV这和这个问题有什么关系?