python kafka 发送json 分批_用户对问题“发送一个json作为字节数组,如何用Python发送给Kafka?”的回答 - 问答 - 云+社区 - 腾讯云...

我最近尝试使用python向Kafka发送消息。当使用简单字节消息时,它可以工作。但是现在,我有一个json数据,需要发送到Kafka主题,然后由Java应用程序使用。

我试图了解如何将json转换为byteArray(这就是Java应用程序期望的有效负载)。所以,我想出了下面的python脚本。但是它失败了,因为json中有几个布尔变量,我得到了一个类型错误,因为Jsontrue和PythonTrue在情况下是不同的。我试图用单引号将json括起来,但是再次得到了‘EOL同时扫描字符串文字’的错误。只有当我修复了这个错误,我才知道我是否能够将这些数据发送给Kafka,所以到目前为止,我还在挣扎于转换部分。下面是我的代码和json。

json:{

"header": {

"activityId": "550",

"timeStamp": "1490093093000",

"sequencingId": 1

},

"queueId": "604",

"contextRef": "SLIP.UPDATE"

,

"state": {

"slips": [{

"id": "550",

"creationDate": "2017-01-30T14:14:14.000+0000",

"accountRef": "1",

"customerRef": "2",

"source": {

"channelRef": "K"

},

"receipt": "O/0000002/0000487",

"isSettled": true,

"isConfirmed": true,

"lines": {

"number": 1,

"win": 1,

"lose": 0,

"voided": 0

}

}]

}

}

Python脚本:#!/usr/bin/python

from kafka import KafkaProducer

KAFKA_TOPIC = 'slips'

KAFKA_BROKERS = '172.17.0.1:9092'

producer = KafkaProducer(value_serializer=lambda v:json.dumps(v).encode('utf-8'),bootstrap_servers=KAFKA_BROKERS)

messages = '{

"header": {

"activityId": "550",

"timeStamp": "1490093093000",

"sequencingId": 1

},

"queueId": "604",

"contextRef": "SLIP.UPDATE"

},

"state": {

"slips": [{

"id": "550",

"creationDate": "2017-01-30T14:14:14.000+0000",

"accountRef": "1",

"customerRef": "2",

"source": {

"channelRef": "K"

},

"receipt": "O/0000002/0000487",

"isSettled": true,

"isConfirmed": true,

"lines": {

"number": 1,

"win": 1,

"lose": 0,

"voided": 0

}

}]

}

}'

info_as_json = json.loads(messages)

producer.send(KAFKA_TOPIC, info_as_json)

在我发布消息之前,消费者一直在使用消息,比如:messages = [b'hello kafka', b'I am sending', b'3 test messages']

consumer:#!/usr/bin/python

import sys

from kafka import KafkaConsumer

KAFKA_TOPIC = 'slips'

KAFKA_BROKERS = '172.17.0.1:9092'

consumer = KafkaConsumer(bootstrap_servers=KAFKA_BROKERS,auto_offset_reset='earliest')

consumer.subscribe([KAFKA_TOPIC])

try:

for message in consumer:

print(message.value)

except KeyboardInterrupt:

sys.exit()

最新情况:

我在json字符串中添加了三元引号,而生产者代码现在没有出现任何错误。但消费者并不是在消费信息。至少,它没有像预期的那样输出它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值