2016-07-07 45 views
1

取一個字段我寫了一個python腳本:如何ConsumerRecord

#!/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 

味精,輸出類似:

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

我知道這個輸出是namedtuple形式。

我的問題是:如何獲得ConsumerRecord的特定字段?例如,我想將值字符串分配給一個變量。

+0

我猜你可以叫'msg.value'提取場'value' ? –

+0

>>> msg = r'''ConsumerRecord(topic = u'ditopic',partition = 0,offset = 6280,timestamp = None,timestamp_type = None,key = None,value ='myvalue')''' > >> msg 「ConsumerRecord(topic = u'ditopic',partition = 0,offset = 6280,timestamp = None,timestamp_type = None,key = None,value ='myvalue')」msg.value Traceback (最近呼叫最後): 文件「」,第1行,在 AttributeError:'str'對象沒有屬性'值' >>> – zhenghuagui

+0

它應該是'msg.value' - 不知道爲什麼它不適合你。請參閱自述文件中的代碼示例https://github.com/dpkp/kafka-python#kafkaconsumer –

回答

0

它可能與您的反序列化數據有關。例如,如果你想從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