Apache kafka 基于ENVs的Kafka消息过滤

Apache kafka 基于ENVs的Kafka消息过滤,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有一个消费者应用程序部署在几个环境开发,测试,阶段和预处理。他们都在使用同一卡夫卡主题,这意味着他们的工作就像同一主题的多个消费者一样 我对所有环境开发、测试、阶段和预制作有单独的制作人应用程序。当在有效负载内生成消息时,它有一个字段来提及生产者的ENV 我们的要求是-Dev ENV的使用者应该只使用Dev ENV的生产者应用程序的消息。其他环境也一样 我的问题是——我应该使用消费者端过滤吗?这能保证我们的要求吗?它将如何确保我们的需求 提前感谢。关于如何处理此要求,您有多种选择。然而,我不认

我有一个消费者应用程序部署在几个环境开发,测试,阶段和预处理。他们都在使用同一卡夫卡主题,这意味着他们的工作就像同一主题的多个消费者一样

我对所有环境开发、测试、阶段和预制作有单独的制作人应用程序。当在有效负载内生成消息时,它有一个字段来提及生产者的ENV

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

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


提前感谢。

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

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

备选案文1: 使用环境开发、测试。。。作为主题的键,并告诉消费者按键过滤

备选案文2: 编写生产者,将数据从每个环境发送到各个分区,并告诉每个环境的使用者仅从特定分区读取

但在实施方案2之前,我宁愿这样做 备选案文3: 每个环境都有一个主题,让制作者/消费者写/读不同的主题。

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

然而,如果您要这样做,那么我建议您使用流处理器为您的消费者创建单独的主题。您可以在Kafka Streams、ksqlDB等中执行此操作

ksqlDB将如下所示:

-在现有主题上声明流 使用KAFKA_TOPIC='my_source_TOPIC',VALUE_FORMAT='AVRO'创建流式FOO_ALL_ENVS; -创建派生流&仅为开发人员填充消息的新主题 -可以显式提供目标卡夫卡主题名称。 创建流FOO_DEV,KAFKA_TOPIC='FOO_DEV'作为SELECT*FROM FOO_ALL_ENVS WHERE ENV='DEV'; -创建派生流&仅为PROD填充消息的新主题 -如果不指定卡夫卡主题名称,它将从 -流名称,即“FOO_PROD”` 创建流FOO_PROD作为SELECT*FROM FOO_ALL_ENVS WHERE ENV='PROD'; -等
现在,如果必须的话,您可以让制作人编写单个主题,但您的消费者可以从特定于其环境的主题中进行消费。ksqlDB语句是连续查询,因此将处理源主题中的所有现有消息以及收到的每一条新消息。

谢谢。关于选项1的一个问题-如果消费者按键筛选,则消息将标记为未使用,并让符合条件的消费者使用它?这取决于消费者是否属于同一消费者组。如果他们不在同一个消费者组中,我认为这会对您有所帮助,那么每个消费者都在自己管理补偿,将过滤掉的消息留给其他消费者。消费者具有相同的组id,这意味着他们在同一组中。是的,具有相同group.id的消费者属于同一组。非常感谢@mike。现在,我认为目前最简单的解决方案是根据不同的环境创建不同的消费群体。虽然不是一个好的解决方案。。。最好为每个环境设置不同的主题,这是我们目前无法做到的。