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

跨多个节点的Kafka消费者水平扩容

丘飞
2023-03-14

我正在数据库中为主题外部化kafka消费者元数据,包括消费者组和组中消费者的数量。

Consumer\u info表具有

主题名称,消费者组名称,组中的消费者数量消费者类名称

在app server启动时,我正在读取表并根据表中设置的数字创建使用者(线程)。如果使用者组计数设置为3,我将创建3个使用者线程。这基于给定主题的分区数

现在,如果我需要横向扩展,我如何将属于同一组的消费者分布在多个应用服务器节点上。没有多次阅读同一信息。

appserver启动时将调用的consumer初始化代码从db读取consumer的元数据,并在app server的同一实例上创建所有consumer线程,即使我添加了更多app server实例,它们都是冗余的,因为启动的第一台服务器产生了与分区数相等的定义的consumer线程。在其他实例上创建的任何其他使用者都将处于空闲状态。

你能建议更好的方法横向扩展消费者吗

共有1个答案

张腾
2023-03-14

消费者群体和群体中的消费者数量

与外部数据库查询相比,临时运行Kafka消费群体(kafka consumer groups)--描述(Descripte)将为您提供更多的最新信息,尤其是考虑到消费者可以重新平衡并随时脱离群体。

如何将属于同一组的消费者分布在多个应用服务器节点上。无需多次阅读相同的消息

假设您没有在代码中手动分配分区,这就是Kafka消费群体开箱即用的操作方式。

在您在组内消耗、加载和提交该偏移量后,不可能多次读取消息

如果您已经可以尝试公开Kafka消费群体命令周围的API,那么我认为不需要外部数据库

或者,您可以使用Cloudera的Stream Messaging Manager,它也会显示大量此类信息

 类似资料:
  • 有一个基本示例,它对1个消费者起作用。它接收消息。但是添加一个额外的消费者将被忽略。 consumer2的“22”事件从未引发问题。如果我使用命令行工具检查该主题,则该主题的数据存在

  • 我想知道什么是相对于最大水平扩展实例数配置分区数量的好方法。 假设我有一个有6个分区的主题。 我有一个应用程序,它使用的与的6.这意味着我将有6个KafkaMessageListenerContainer,每个都使用一个线程,并且均匀地消耗来自所有分区的消息。 如果以上是正确的,那么我想知道如果我通过添加另一个实例水平缩放应用程序会发生什么?如果新实例具有相同的配置,并发为6,当然也具有相同的消费

  • apache kafka文档提到以下内容: 如果所有使用者实例具有相同的使用者组,那么记录将有效地在使用者实例上进行负载平衡。 如果所有的使用者实例都有不同的使用者组,那么每个记录都将广播给所有的使用者进程。

  • 我有一个主题列表(目前是10个),其大小可以在未来增加。我知道我们可以产生多个线程(每个主题)来消耗每个主题,但在我的例子中,如果主题的数量增加,那么消耗主题的线程数量也会增加,这是我不希望的,因为主题不会太频繁地获取数据,所以线程将是理想的。 有没有办法让单个消费者从所有话题中消费?如果是的话,我们怎样才能做到呢?另外,Kafka将如何维护抵消?请建议答案。

  • 问题是Spring Kafka侦听器只配置了主题名。 我似乎可以让Kafka产生100个消费者来处理来自“队列”(日志)的消息。怎么能做到呢?

  • 我们正在开发一个应用程序,我们想听Kafka中不止一个主题。所有主题都有一个分区。所有主题名称都有一个公共的前缀,例如“test-x”、“test-y”,所以我们可以对它使用spring。 我们希望编写一个java spring使用者,它使用模式监听所有主题。我们的想法是,我们可以运行同一个消费者(属于同一个组)的多个实例,Kafka将为不同的消费者分发来自不同主题的消息。 然而,这似乎并不奏效。