[英]Consuming from multiple Kafka topics
我想编写一个 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。 除了表名之外,这是我唯一对其值感兴趣的列。
这完全是关于您的值如何被产生消息的应用程序(连接器)序列化。 如果Deserializer
( Serdes
) 可以从不同类型的消息中提取created_at
是可能的。
所以,答案是肯定的,但这取决于您的消息值 nad Deserializer
。
假设序列化后所有消息的格式如下:
在这种情况下, Deserializer
只需要获取字符直到 first ;
并将其转换为日期,其余的价值可以丢弃。
示例代码:
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(";"))));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.