apache - Avro 消息中的架构

标签 apache avro spark-avro avro-tools avro4s

我看到 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/

相关文章:

Apache 从子域重写为 www 但保留所有永久链接

java - 仅限 Apache avro 代码生成 POJO

c# - 反序列化 Avro Spark

apache-spark - 如何从空 RDD 读取 Avro 模式?

apache - 如何在 google 容器引擎和 apache 设置中获取真实的客户 ip

apache - mod_filter : Why does a SUBSTITUTE not work for certain URLs?

apache - htaccess 中 http 到 https 重定向的异常

java - Gradle将通过CLI而不是Intellij(实例方法不存在)传递

hadoop - AvroMultipleOutputs 创建空文件,日志中没有错误