我有一个Avro模式,命名空间为"ca.gms.api-event-log"。 我已使用此架构将消息序列化为 Kafka,成功将该架构注册到 Kafka 架构注册表,并使用 Kafka 连接器将该数据作为 .avro 文件发送到 Amazon S3。 到目前为止,没有问题。
我现在正在尝试使用 Azure 数据工厂将该数据从 AWS S3 复制到 Azure,它抱怨以下情况:
无法反序列化 Avro 源文件"topics/api-event-log/partition=0/api-event-log+0+0000000000.avro"。这可能是由无效的 Avro 数据引起的。请检查数据,然后重试。命名空间"ca.gms.api-event-log"包含无效字符。.活动 ID: 12a7dda0-8cb7-4c79-a070-d366fddb1c00
"ca.gms.api-event-log"真的包含无效字符吗? 不允许使用连字符吗? Apache Avro 规范似乎表明任何有效的 JSON 字符串都应该工作:https://avro.apache.org/docs/current/spec.html
我注意到 Python avro 客户端中不允许使用连字符,但在 Java API 中很好。
因此,它最终取决于所使用的解析器,但我想说的经验法则是保持与 Java 包相同的命名规则,其中连字符也是不允许的。
注意:您可能应该尝试使用能够写入 Azure 的 Kafka 连接器,而不是支付 S3 存储 + 传输费用。也不清楚为什么如果您只是复制原始文件,甚至要打开文件以检查架构