首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ENVs的Kafka消息过滤

基于ENVs的Kafka消息过滤
EN

Stack Overflow用户
提问于 2020-03-11 23:48:55
回答 2查看 255关注 0票数 0

我在几个环境(dev、test、stage和preprod)上部署了一个消费者应用程序。它们都在消费相同的Kafka主题(意味着工作方式类似于同一主题的多个消费者)。

我对所有环境(dev、test、stage和preprod)都有单独的生产者应用程序。在有效负载中生成消息时,它有一个字段来提到生产者的ENV。

我们的要求是- Dev ENV的消费者应该只消费Dev ENV的生产者应用程序的消息。其他环境也是如此。

我的问题是-我应该使用消费者端过滤吗?这能保证我们的要求吗?它将如何确保我们的需求?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-03-11 23:57:01

对于如何处理此需求,您有多种选择。然而,我认为一般来说,为不同的环境设置一个主题并不是一个好主意。考虑到数据保护和访问权限,这听起来不像是一个好的设计。

无论如何,我看到了以下选项。

测试选项1:使用环境(开发,测试,...)作为主题的关键字,并告诉消费者按关键字过滤。

选项2:写入生产者将数据从每个环境发送到单独的分区,并告诉每个环境的消费者仅从特定分区读取数据。

但在实现选项2之前,我宁愿做选项3:为每个环境都有一个主题,让生产者/消费者从不同的主题中写入/读取。

票数 1
EN

Stack Overflow用户

发布于 2020-03-12 00:56:30

我同意mike的观点,即跨环境使用单一主题不是一个好主意。

但是,如果您打算这样做,那么我建议您使用流处理器为您的用户创建单独的主题。您可以在Kafka Streams、ksqlDB等中执行此操作。

ksqlDB将如下所示:

代码语言:javascript
复制
-- Declare stream over existing topic
CREATE STREAM FOO_ALL_ENVS WITH (KAFKA_TOPIC='my_source_topic', VALUE_FORMAT='AVRO'); 

-- Create derived stream & new topic populated with message just for DEV
-- You can explicitly provide the target Kafka topic name.
CREATE STREAM FOO_DEV WITH (KAFKA_TOPIC='foo_dev') AS SELECT * FROM FOO_ALL_ENVS WHERE ENV='DEV';

-- Create derived stream & new topic populated with message just for PROD
-- If you don't specify a Kafka topic name it will inherit from the 
-- stream name (i.e. `FOO_PROD`)
CREATE STREAM FOO_PROD AS SELECT * FROM FOO_ALL_ENVS WHERE ENV='PROD';
-- etc

现在您让您的生产者编写单个主题(如果您必须这样做),但是您的消费者可以使用特定于其环境的主题。ksqlDB语句是连续查询,因此将处理源主题中的所有现有消息以及到达的每条新消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60639846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档