为什么在 Kafka REST 代理中使用 base64 encode/decode?
Why base64 encode/decode in Kafka REST Proxy?
Producer将消息序列化,以字节数组的形式发送给Broker。消费者反序列化这些字节数组。 Broker 总是存储和传递字节数组。我是这样理解的。
但是当您在 Kafka 中使用 REST Proxy 时,生产者使用 base64 对消息进行编码,而消费者对这些 base64 消息进行解码。
生产者和消费者的 Python 示例:
# Producer using the REST Proxy
payload = {"records" :
[{
"key":base64.b64encode("firstkey"),
"value":base64.b64encode("firstvalue")
}]}
# Consumer using the REST Proxy
print "Message Key:" + base64.b64decode(message["key"])
为什么要将 base64 中的消息而不是字节数组发送到 Broker?
使用 REST 代理时,Broker 以 base64 格式存储消息?
当生产者想要发送消息时'Man',它序列化为字节(位)。 Broker 会将其存储为 010011010110000101101110
。当 Consumer 收到此消息时,它将反序列化回 Man。
但是,根据 Confluent 文档:
Data formats - The REST Proxy can read and write data using JSON, raw bytes encoded with base64 or using JSON-encoded Avro.
因此,使用 REST Proxy 的 Producer 会将消息 Man
更改为 TWFu
(base64 编码)并将其发送给 Broker,而使用 REST Proxy 的 Consumer 会将其 base64 解码回Man
。
正如您已经回答的那样,代理始终以二进制格式存储数据。
回答为什么需要 base 64 而不是我在汇合文档 (https://www.confluent.io/blog/a-comprehensive-rest-proxy-for-kafka/) 上找到这个:
当您必须通过 Rest Proxy 发送原始二进制数据时,使用 base64 编码的必要性更加明确:
If you opt to use raw binary data, it cannot be embedded directly in JSON, so the API uses a string containing the base64 encoded data.
Producer将消息序列化,以字节数组的形式发送给Broker。消费者反序列化这些字节数组。 Broker 总是存储和传递字节数组。我是这样理解的。
但是当您在 Kafka 中使用 REST Proxy 时,生产者使用 base64 对消息进行编码,而消费者对这些 base64 消息进行解码。
生产者和消费者的 Python 示例:
# Producer using the REST Proxy
payload = {"records" :
[{
"key":base64.b64encode("firstkey"),
"value":base64.b64encode("firstvalue")
}]}
# Consumer using the REST Proxy
print "Message Key:" + base64.b64decode(message["key"])
为什么要将 base64 中的消息而不是字节数组发送到 Broker? 使用 REST 代理时,Broker 以 base64 格式存储消息?
当生产者想要发送消息时'Man',它序列化为字节(位)。 Broker 会将其存储为 010011010110000101101110
。当 Consumer 收到此消息时,它将反序列化回 Man。
但是,根据 Confluent 文档:
Data formats - The REST Proxy can read and write data using JSON, raw bytes encoded with base64 or using JSON-encoded Avro.
因此,使用 REST Proxy 的 Producer 会将消息 Man
更改为 TWFu
(base64 编码)并将其发送给 Broker,而使用 REST Proxy 的 Consumer 会将其 base64 解码回Man
。
正如您已经回答的那样,代理始终以二进制格式存储数据。
回答为什么需要 base 64 而不是我在汇合文档 (https://www.confluent.io/blog/a-comprehensive-rest-proxy-for-kafka/) 上找到这个:
当您必须通过 Rest Proxy 发送原始二进制数据时,使用 base64 编码的必要性更加明确:
If you opt to use raw binary data, it cannot be embedded directly in JSON, so the API uses a string containing the base64 encoded data.