Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以bytearray的形式发送json,并使用Python发送到kafka_Java_Python_Json_Apache Kafka - Fatal编程技术网

Java 以bytearray的形式发送json,并使用Python发送到kafka

Java 以bytearray的形式发送json,并使用Python发送到kafka,java,python,json,apache-kafka,Java,Python,Json,Apache Kafka,我最近尝试使用python向卡夫卡发送消息。当使用简单字节消息时,它可以工作。但现在,我有一个json数据,我需要将它发送到Kafka主题,然后Java应用程序将使用它 我试图找出如何将json转换为byteArray(这是Java应用程序所期望的负载)。因此,我提出了下面的python脚本。但它失败了,因为json中有一些布尔变量,我得到了一个类型错误,因为json true和Python true在case中是不同的。我试图用单引号将json括起来,但还是出现了错误“EOL while sc

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

我试图找出如何将json转换为byteArray(这是Java应用程序所期望的负载)。因此,我提出了下面的python脚本。但它失败了,因为json中有一些布尔变量,我得到了一个类型错误,因为json true和Python true在case中是不同的。我试图用单引号将json括起来,但还是出现了错误“EOL while scanning string literal”。只有在我修复了这个错误之后,我才能知道我是否能够将这些数据发送到卡夫卡,所以到目前为止,我正在努力处理转换部分。下面是我的代码和json

Json:

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']
消费者:

#!/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字符串中添加了三个引号,现在生产者代码没有给出任何错误。但消费者并不消费这些信息。至少,它没有像我期望的那样打印它们。

最后,我能够使用消息。似乎制片人有问题。我浏览了一些关于StackOverflow的帖子,然后在我的制作人代码中添加了以下两个更改,结果很好

1) 初始化生产者时,玲珑_ms=10

producer = KafkaProducer(value_serializer=lambda v:json.dumps(v).encode('utf-8'),bootstrap_servers=KAFKA_BROKERS, linger_ms=10)
2) 发送消息后刷新

producer.flush()

我还不知道为什么我的制作人没有对简单字节消息进行这些更改,而不是对json进行更改

可能重复的请尝试替换脚本中的此部分,在前后添加三个双引号,例如:messages=“”{“header”:{“activityId”:“550”、#等“lose”:0,“void”:0}}}]}“}”,谢谢,这很有帮助。但我的消费者并没有意识到这一点。您发现我的生产商代码有任何问题吗?显示您是如何使用数据的我已编辑了消费者代码的问题。您发现为什么需要这些更改了吗?
producer.flush()