我想编写一个Kafka应用程序,该应用程序从主题中使用并将某些内容保存在数据库中。主题由Debezium Kafka connect基于mysql binlog创建。所以我每桌只有一个主题。 这是我从一个主题中使用的代码:
KStream<GenericRecord,mysql.company.tiers.Envelope>[] tierStream = builder.stream("mysql.alopeyk.tiers",
Consumed.with(TierSerde.getGenericKeySerde(), TierSerde.getEnvelopeSerde()));
从架构的角度来看,我应该为每个表创建一个KStream并并行运行它们。但是表的数量如此之大,拥有这么多线程可能不是最佳选择。
所有表都有一个称为created_at的列(这是一个laravel应用程序),因此我很好奇是否有一种方法可以为提取此公共列的值提供通用Serde。除了表名之外,这是我唯一感兴趣的列。
答案 0 :(得分:1)
这一切与产生消息的applicatino如何将您的价值序列化(连接器)有关。
如果Deserializer
(Serdes
)可以从不同类型的消息中提取created_at
,则可能。
因此,答案是肯定的,但这取决于您的消息值Deserializer
。
假设序列化后所有消息的格式如下:
在这种情况下,Deserializer
只需要将字符放在第一个;
之前并将其强制转换为日期,其余的值都可以删除。
示例代码:
public class CustomDeserializer implements Deserializer<Date> {
@Override
public Date deserialize(String topic, byte[] data) {
String strDate = new String(data);
return new Date(Long.parseLong(strDate.substring(0, strDate.indexOf(";"))));
}
}