如何在ConsumerRecord中获取字段

时间:2016-07-07 08:10:17

标签: python apache-kafka namedtuple

我写了一个python脚本:

#!/usr/bin/env python
from kafka import KafkaConsumer
consumer = KafkaConsumer('dimon_tcpdump',group_id='zhg_group',bootstrap_servers='192.168.100.9:9092')
for msg in consumer:
    print msg
    # process mes here

msg输出如下:

ConsumerRecord(topic=u'ditopic', partition=0, offset=6280, timestamp=None, timestamp_type=None, key=None, value='myvalue')

我知道输出是一个namedtuple形式。

我的问题是:如何获取ConsumerRecord的特定字段? 例如,我想将值字符串赋值给变量。

2 个答案:

答案 0 :(得分:1)

这可能与您反序列化数据的方式有关。例如,如果您想从msg中获取一些JSON。您可以使用以下内容初始化Consumer

value_deserializer=lambda m: json.loads(m.decode('utf-8'))

所以你的代码看起来像这样:

#!/usr/bin/env python
from kafka import KafkaConsumer
consumer = KafkaConsumer(
   'dimon_tcpdump',
    group_id='zhg_group',
    value_deserializer=lambda m: json.loads(m.decode('utf-8')),
    bootstrap_servers='192.168.100.9:9092'
    )
for msg in consumer:
    print msg.value
    # process mes here

答案 1 :(得分:0)

您知道您的max-height的类型为msg,您可以通过属性查找简单地访问其字段,例如:

namedtuple

在注释部分,似乎您通过以下方式将for msg in consumer: value_to_process = msg.value 的输出字符串重新分配给msg

msg

这就是为什么您得到msg = r'''ConsumerRecord(topic=u'ditopic', partition=0, offset=6280, timestamp=None, timestamp_type=None, key=None, value='myvalue')''' 的原因:此时AttributeError被覆盖并变成msg对象,但是str没有str属性