繁体   English   中英

从多个 Kafka 主题中消费

[英]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

假设序列化后所有消息的格式如下:

  • create_at;名称:位置;...
  • create_at;城市,国家;...
  • create_at;product_name;...

在这种情况下, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM