【问题标题】:Can Kafka brokers store data not only in binary format but also Avro, JSON, and strings?Kafka 代理能否以二进制格式以及 Avro、JSON 和字符串格式存储数据?
【发布时间】:2019-08-01 17:00:02
【问题描述】:

我对 Kafka 经纪人感到非常困惑。我以为他们将消息(数据、记录)存储为二进制格式,例如 0100110111...(有些人可能称它们为字节数组、字节流、字节数组等)

当我阅读 Kafka Connect 时,它说消息存储在 Avro 对象、JSON 对象或 Kafka 中的字符串中。

卡夫卡权威指南:

... 然后,worker 使用配置的转换器将记录转换为 Avro 对象、JSON 对象或字符串,然后将结果存储到 Kafka。 ... 当 Connect Worker 从 Kafka 读取记录时,它使用配置的转换器将记录从 Kafka 中的格式(即 Avro、JSON 或字符串)转换为 Connect Data API 记录,然后将其传递给 sink 连接器,它将它插入到目标系统中。

Kafka 代理可以存储二进制数据和 Avro、JSON 和字符串?

还是说 JSON、Avro、String 是二进制数据?

(我知道生产者/消费者的序列化/反序列化。我的问题只是关于经纪人的观点。)

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    当数据被运送到 Kafka Brokers 时,它是从不同的数据类型序列化的 即在写入日志文件之前将 avro/json/string/other 数据类型转换为 bytearray 格式。

    Kafka 主题日志文件将始终将数据存储为 bytearray 格式。通过消费者读取时,bytearray 数据被反序列化为可读格式,即字符串、avro、json 等。

    【讨论】:

    • Broker 也可以序列化数据吗?我以为只有 Producer 可以序列化数据。也许连接器(工作者)在将数据发送到代理之前序列化 Avro、JSON 或字符串?
    • Broker 不会序列化或反序列化数据。生产者/消费者完成这项工作。连接工作人员的方式与此相同。
    • 谢谢。现在越来越清楚了。所以例如mySQL中的一条记录会通过connector变成一个Avro,然后序列化成字节数组存储在broker中。我理解正确吗?
    • 由于 Kafka 将 key 和 value 数据存储为简单的字节数组,您可以使用字节反序列化器进行通用读取,并将特定格式的反序列化推迟到以后。消息中的标题有助于延迟策略,因为您可以告诉自己关键信息甚至数据格式,以便后续按需反序列化,或者在不直接影响消费者性能的地方。
    【解决方案2】:

    Avro 本身有一个类似 JSON 的数据模型,所以我们可以说它们是相似的。但是,Avro 也可以表示为 JSON 和二进制形式,因此它是您问题的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2018-08-30
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多