自从kafka 0.8.2.0以来,似乎很难追踪消费者滞后和话题规模
如何跟踪卡夫卡的偏移(主题大小)和滞后?当您的生产者插入消息并在消费者确认消息时递增另一个计数器时,您是否在某处递增计数器?
我正在使用airbnb's kafka-statsd-metrics2 - 但由于某些原因,所有关于主题大小的指标始终为0
,它可能是针对他们的错误报告,但您是如何做到的?
我们的消费者和生产者是使用kafka-python用python编写的,他们说他们不支持ConsumerCoordinator偏移API,所以我把一个解决方案查询到zookeeper并将这些指标发送到statsd实例(看起来非常好)尴尬),但我仍然缺少主题大小指标。
我们正在使用collectd来收集系统指标,我没有使用JMX的经验并且在collectd中配置它似乎相当复杂,我已经尝试了几次,所以我找到了一些不这样做的方法。 / p>
如果您有任何输入我很乐意听到它,即使它是:“这属于x stackexchange-site”
答案 0 :(得分:2)
如果我理解正确,您可以使用HighwaterMarkOffset
中的FetchResponse
。通过这种方式,您将知道分区末尾的偏移量,并且能够将其与当前的acked偏移量或此FetchResponse
中最后一条消息的偏移量进行比较。
详情here
答案 1 :(得分:1)
您是否尝试使用https://github.com/quantifind/KafkaOffsetMonitor来监控消费者滞后情况。它适用于0.8.2.0
答案 2 :(得分:0)
这是代码段,请确保在活动控制器中运行它。 BOOTSTRAP_SERVERS是活动的控制器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)
答案 3 :(得分:-2)
有人可以说MemberAssignment是从哪个模块导入的吗?
对于MemberAssignment.decode(member_assignment).assignment中的(主题,分区):