我想和Kafka和avro一起做一些疯狂的事情。有人把我从悬架上说下来:
record Bundle {
string key;
array<bytes> msgs;
}生产者单独序列化一组共享一个键的消息,然后序列化一个捆绑包并发布到一个主题。
一般的扁平器服务由启动参数配置为侦听1...n个包含捆绑包的kafka主题,然后将捆绑的消息盲目转发到配置的输出主题,一次一个。(盲目地表示它从数组中提取字节并将它们放入线上。)
使用案例:
我有响应小操作(更新记录、删除记录等)的服务。有时,我希望需要保证的批操作不会与相同密钥的其他操作交织在一起。
为了实现这一点,我的想法是在每个有问题的服务前面放置一个展平器。普通的,一次性的命令被存储在1项捆绑包中,真正的批处理被捆绑成更大的。
我没有为内部消息使用特定的字段类型,因为我希望能够在所有地方重用展平程序
这有什么意义吗?潜在的缺点?
编辑:
扁平器服务的每个实例将只传递嵌入了schema_ids的最终消费者已知类型的消息。
数组不是特定类型的数组的唯一原因是,我希望能够在多个不同的服务(只是使用不同的环境变量/命令行参数启动)之前重用未更改的扁平器。
发布于 2018-08-24 21:49:50
我将把我的评论转移到一个答案上,因为我认为“说服你离开悬架”是合理的;)
如果您设置了一个Producer<String, GenericRecord> (根据需要更改Avro类),那么您已经有了一个字符串键和Avro字节作为值。这样,您将不需要嵌入任何内容
https://stackoverflow.com/questions/51920497
复制相似问题