当前位置: 首页 > 知识库问答 >
问题:

将单个Kafka主题的信息分发给特定的消费者

东方华荣
2023-03-14

Avro对单个Kafka主题的信息进行编码,单个分区。这些消息中的每一条都只能由特定的消费者使用。对于ex,关于这个主题的消息a1、a2、b1和c1,有3个消费者,分别名为A、B和C,每个消费者将获得所有消息,但最终A将使用a1和a2、b1上的B和c1上的C。

我想知道当在Kafka上使用avro时,这是如何典型地解决的:

  1. 让使用者反序列化消息,然后由某个应用程序逻辑决定使用消息还是删除消息
  2. 使用分区逻辑将每个消息发送到特定分区,然后将每个使用者设置为只侦听单个分区
  3. 设置另外3个主题和一个小型kafka-stream应用程序,该应用程序将执行从主主题到这3个特定主题的过滤+路由操作
  4. 利用kafka报头注入标识符以供下游消费者过滤

看来每种选择都有利弊。我想知道是否有一个惯例,人们遵循或有一些其他的方法来解决这个问题。

共有1个答案

吕修伟
2023-03-14

这要看情况...

如果您只有一个单独的分区主题,唯一的选择是让每个使用者读取所有数据,并筛选使用者感兴趣的数据的客户端。在这种情况下,每个使用者都需要使用不同的group.id来将使用者彼此隔离开来。

选项2当然是可能的,如果你能控制你正在阅读的输入主题。对于每个使用者,您可能仍然有不同的group.ids,因为使用者似乎代表不同的应用程序,应该相互隔离。问题仍然是这是否是一个好的模型,因为分区的思想是提供水平扩展和数据并行处理;但是,如果每个应用程序只从一个分区读取,它似乎不符合这个模型。您还需要知道哪些数据进入哪个分区的生产者端和消费者端,以便正确地进行映射。因此,这意味着生产者和消费者之间的“协调”,这似乎是不可取的。

 类似资料:
  • 有人能帮我弄清楚这件事吗。 谢了!

  • 在我的Spring Boot Kafka应用程序中,我有以下使用者配置: 消费者: 如果我理解正确的话,现在我有一个消费者的实例。我想增加post消费者的数量,假设有5个消费者将消费来自${kafka.topic.post.send}的不同(不同)消息,以加快消息消费。 它是否像添加工厂一样简单。setConcurrency(5) 至我的PostKafkAlisterContainerFactor

  • 阅读主题中的所有分区: ~bin/kafka-console-consumer.sh--zookeeper localhost:2181--topic myTopic--从头开始 如何使用主题的特定分区?(例如使用分区键13) 以及如何使用特定分区键在分区中生成消息?有可能吗?

  • 我正在用java编写一个简单的Kafka使用者,它被配置为读取多个主题。目前,让我们假设两个主题(topic1和Topic2),并为两个主题设置一个分区。 Kafka用户从topic1和Topic2读取的顺序是什么。如果这两个主题都有,假设已经发布了100条消息。 使用者首先从topic1读取所有消息,然后再从topic2读取? 用户按时间顺序阅读,将来自两个主题的消息混合在一起? 我看了Kafk

  • 有一个16个分区的Kafka主题 使用给定的消费者组名称,我们目前正在启动单个消费者来阅读该主题。 > 单个消费者是否从该主题的(仅)读取?如果带有消息为空,消费者是否从下一个分区开始读取(...等等)? 我们可以选择启动多个消费者(使用相同的消费者组名称)来读取相同的主题(有16个分区)。为了并行读取多个分区,可以维护多少消费者?

  • 生产者发送消息到一个有四个分区的主题。我们有一个消费者在消费来自这个主题的消息。应用程序在工作日一直运行周末例外:它不会在周末期间调用poll方法。 使用者配置:自动提交,自动提交时间为5s(默认)。 应用程序一直运行良好,直到一个星期天,当它重新开始调用poll方法。我们看到有数百万条消息从这个话题中被轮询出来。消费者基本上是轮询来自主题的所有消息。将新的偏移量与它在周末停止之前的偏移量进行比较