saymynamej Asked:2024-02-09 22:06:36 +0000 UTC2024-02-09 22:06:36 +0000 UTC 2024-02-09 22:06:36 +0000 UTC 通过过滤从 Kafka 中读取 - 一个架构错误? 772 从 Kafka 读取消息然后根据某些参数对其进行过滤是一个坏主意并且是一个架构错误,这真的是一个坏主意吗? apache-kafka 1 个回答 Voted Best Answer CrazyElf 2024-02-13T14:48:34Z2024-02-13T14:48:34Z 如果过滤意味着根据某些标准仅选择您需要的部分消息,那么理想情况下,应该为每个目的分配一个特定主题,您可以完整阅读该主题。如果Kafka您获得一些数据,其中一些数据是某些消费者需要的,另一些是其他消费者需要的,那么过滤消费者上的数据是一个坏主意,因为事实证明您正在通过不必要的数据浪费时间Kafka。有一个特殊的概念Kafka streams,专门设计用于过滤数据Kafka并将其放回其中。 例如,您有某个AllData包含数据的主题,其中一些数据是某些消费者需要的,另一些是其他消费者需要的。您在 上编写一个服务Kafka streams,该服务执行过滤并将过滤后的数据放回到Kafka主题SystemData和中ClientData。然后两个不同群体的消费者会完整地阅读这些主题,而不进行过滤。这个方案是正确的。 人们简单地认为数据只写入一次,但由于各种原因可以多次读取。例如,同一主题可以由不同的消费者群体阅读。或者消费者可以定期重新启动并再次阅读同一主题。因此,最好立即过滤数据并将其放入单独的主题中,这样过滤的开销将很小 - 它只会在写入您正在过滤的主题时立即执行一次,而不是每次读取时执行来自过滤后的主题,如您问题的示例所示。 如果您绝对确定主题中的数据仅由您严格读取一次,那么当然,在何处过滤数据将没有区别。
如果过滤意味着根据某些标准仅选择您需要的部分消息,那么理想情况下,应该为每个目的分配一个特定主题,您可以完整阅读该主题。如果
Kafka您获得一些数据,其中一些数据是某些消费者需要的,另一些是其他消费者需要的,那么过滤消费者上的数据是一个坏主意,因为事实证明您正在通过不必要的数据浪费时间Kafka。有一个特殊的概念Kafka streams,专门设计用于过滤数据Kafka并将其放回其中。例如,您有某个
AllData包含数据的主题,其中一些数据是某些消费者需要的,另一些是其他消费者需要的。您在 上编写一个服务Kafka streams,该服务执行过滤并将过滤后的数据放回到Kafka主题SystemData和中ClientData。然后两个不同群体的消费者会完整地阅读这些主题,而不进行过滤。这个方案是正确的。人们简单地认为数据只写入一次,但由于各种原因可以多次读取。例如,同一主题可以由不同的消费者群体阅读。或者消费者可以定期重新启动并再次阅读同一主题。因此,最好立即过滤数据并将其放入单独的主题中,这样过滤的开销将很小 - 它只会在写入您正在过滤的主题时立即执行一次,而不是每次读取时执行来自过滤后的主题,如您问题的示例所示。
如果您绝对确定主题中的数据仅由您严格读取一次,那么当然,在何处过滤数据将没有区别。