Kafka KSQL 等效于 VIEW 的 VIEW,适用于需要数据子集的消费者



我们正在Kafka中实现一个ETL,将数据从单个源加载到具有不同消费者的不同目标系统中。 每个消费者都需要数据的子集,为此我们有以下主题:

主题无限保留--->存储源中的所有数据

topicB --> 由带有 where 子句的 KSQL 语句填充的有限保留

例:

CREATE STREAM streamA WITH (KAFKA_TOPIC='topicA')
CREATE STREAM streamB WITH (KAFKA_TOPIC='topicB') AS SELECT * FROM streamA WHERE gender='MALE'

之后,我们有一个接收器连接器或连接到 topicB 的使用者,以仅使用性别为男性或重新映射某些列名称的数据

由于我们正在运行大量数据的初始导入,我想了解是否有任何方法可以减少 streamB 所需的存储量,因为它的数据只是主题 A 的副本。 在SQL中,我会实现它一个视图,我如何在KSQL中做到这一点?

我的想法是缩短主题 B 的保留期,但这并不能解决初始加载的问题(例如,如果我必须在开始时加载 10TB 的数据,即使我有 1 天的保留期一天,我需要 10TB + 5TB(。还有其他解决方案吗?

如果您想最小化 topicB 在集群中占用的空间,我会看到以下选项:

  1. 将主题的基于时间的保留设置(例如(减少到 6 小时、1 小时或 30 分钟等。
  2. 为主题使用基于大小的保留设置,例如每个分区 100MB。

但是,请注意,在每种情况下,你都需要确保使用者能够在保留策略启动和删除数据之前使用数据。 如果在使用者可以使用数据之前删除数据,使用者将记录警告。

  1. 降低主题的复制因子。 对于您的主要"黄金真理"主题,您希望以至少 3 的复制因子运行,以便它能够抵御计算机故障。 但是,对于主题 b,您可以使用较低的因子运行,例如 2 或 1。 这将使存储成本减半/三分之一。 当然,如果您在此过程中丢失了一台计算机/磁盘,并且您只有 1 个副本,您将丢失数据并需要从中恢复。

  2. 扩展您的卡夫卡集群!

最新更新