我写了一个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
的特定字段?
例如,我想将值字符串赋值给变量。
答案 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
属性