为什么在 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.