我看到 Avro 消息嵌入了模式,然后是二进制格式的数据。如果发送多条消息并且为每条消息创建新的 avro 文件,那么模式嵌入不是开销吗? 那么,这是否意味着生产者对消息进行批处理然后写入总是很重要,因此写入一个 avro 文件的多条消息只携带一个模式? 另一方面,是否可以选择在使用 Generic/SpecificDatum 编写器进行序列化时消除模式嵌入?
最佳答案
我正在阅读 Avro Specs 中的以下几点
- Apache Avro 是一个数据序列化系统。
- Avro 依赖于模式。
- 读取 Avro 数据时,写入时使用的模式始终是 展示。
- 序列化的目标是避免每个值 开销,使序列化既快又小。
- 当 Avro 数据存储在文件中时,其模式也随之存储。
如果您想为每条新消息写入 1 个新文件,则不应使用数据序列化系统。这与序列化的目标相反。在这种情况下,您希望将元数据和数据分开。
在写入 avro 文件时,没有可用于消除模式的选项。这将违反 avro 规范。
IMO,将多条消息批处理到单个 avro 文件时应该保持平衡。 Avro 文件应该被理想地分解以提高 i/o 效率。对于 HDFS, block 大小将是理想的 avro 文件大小。
关于apache - Avro 消息中的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468694/