如何从python客户端发送JSON对象到kafka storm

时间:2015-08-05 04:20:59

标签: python json apache-kafka apache-storm kafka-python

我有一个简单的JSON对象,如下所示

d = { 'tag ': 'blah',
  'name' : 'sam',
  'score': 
    {'row1': 100,
      'row2': 200
     }
}

以下是我发送消息给Kafka的python代码

from kafka import SimpleProducer, KafkaClient
import json 

# To send messages synchronously
kafka = KafkaClient('10.20.30.12:9092')
producer = SimpleProducer(kafka)
jd = json.dumps(d)
producer.send_messages(b'message1',jd)

我在风暴日志中看到消息正在接收但它正在投掷 变换null为元组{json结构在这里} 不知道为了解决这个问题需要做些什么?...

2 个答案:

答案 0 :(得分:2)

以下是我为kafka制作人的代码。我做的唯一不同的是使用yaml.safe_load来加载json内容。它将内容作为字符串而不是unicode返回。以下是摘录

with open('smaller_test_prod.txt') as f:
    for line in f:
        d = yaml.safe_load(line)
        jd = json.dumps(d)
        producer.send_messages(b'zeus_metrics',jd)

在这里,每一行都是存储在文件中的json数据。

答案 1 :(得分:0)

Kafka期望以字节为单位的值

b`some json message`

这是我的简单Kafka制作人,它将消息发送给Kafka服务器。

import json
from bson import json_util

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='localhost:9092')

for i in range(10):
    data = { 'tag ': 'blah',
        'name' : 'sam',
        'index' : i,
        'score': 
            {'row1': 100,
             'row2': 200
        }
    }   
    producer.send('orders', json.dumps(d, indent=4, default=json_util.default).encode('utf-8'))

这里json.dumps()将json转换为字符串,编码('utf-8')将字符串转换为字节数组。