Avro消息中的Avro消息:合理吗?

时间:2018-08-19 18:10:11

标签: apache-kafka avro

我想对卡夫卡和阿夫罗做些疯狂的事情。有人在壁架上说出我的话

record Bundle {
   string key;
   array<bytes> msgs;
}

生产者分别序列化一串共享密钥的消息,然后序列化一束并发布到主题。

通用的Flattener服务由启动参数配置,以侦听包含捆绑软件的1 ... n个kafka主题,然后一次将盲文转发给已配置的输出主题。 (盲目的意思是,它从数组中取出字节并将其放在网络上。)

用例:

我有响应小操作(更新记录,删除记录等)的服务。有时,我希望不需要保证同一批密钥的批量操作不与其他操​​作交错。

要实现此目的,我的想法是将Flattener置于每个相关服务的前面。正常的一次性命令存储在1个项目的捆绑包中,真正的批量捆绑在更大的捆绑包中。

对于内部消息,我不使用特定的字段类型,因为我希望能够在整个地方重复使用Flattener

这完全有意义吗?潜在的弊端?

编辑:

Flattener服务的每个实例将只传递最终消费者已知类型的消息,这些消息中嵌入了schema_id。

数组不是特定类型的数组的唯一原因是我希望能够在多个不同服务(只是从不同的环境变量/命令行参数开始)之前重用Flattener。

1 个答案:

答案 0 :(得分:0)

我将把我的评论移至答案,因为我认为“让您脱离壁架是合理的;”)

如果您设置Producer<String, GenericRecord>(根据需要更改Avro类),则您已经具有String键和Avro字节作为值。这样,您将不需要嵌入任何内容