我想对卡夫卡和阿夫罗做些疯狂的事情。有人在壁架上说出我的话
record Bundle {
string key;
array<bytes> msgs;
}
生产者分别序列化一串共享密钥的消息,然后序列化一束并发布到主题。
通用的Flattener服务由启动参数配置,以侦听包含捆绑软件的1 ... n个kafka主题,然后一次将盲文转发给已配置的输出主题。 (盲目的意思是,它从数组中取出字节并将其放在网络上。)
用例:
我有响应小操作(更新记录,删除记录等)的服务。有时,我希望不需要保证同一批密钥的批量操作不与其他操作交错。
要实现此目的,我的想法是将Flattener置于每个相关服务的前面。正常的一次性命令存储在1个项目的捆绑包中,真正的批量捆绑在更大的捆绑包中。
对于内部消息,我不使用特定的字段类型,因为我希望能够在整个地方重复使用Flattener
这完全有意义吗?潜在的弊端?
编辑:
Flattener服务的每个实例将只传递最终消费者已知类型的消息,这些消息中嵌入了schema_id。
数组不是特定类型的数组的唯一原因是我希望能够在多个不同服务(只是从不同的环境变量/命令行参数开始)之前重用Flattener。
答案 0 :(得分:0)
我将把我的评论移至答案,因为我认为“让您脱离壁架是合理的;”)
如果您设置Producer<String, GenericRecord>
(根据需要更改Avro类),则您已经具有String键和Avro字节作为值。这样,您将不需要嵌入任何内容