gpt4 book ai didi

java - Kafka : Single consumer group, 无分区和多个主题

转载 作者:行者123 更新时间:2023-12-02 01:08:00 25 4
gpt4 key购买 nike

我有 22 个主题,主题内的排序对我来说很重要。我没有任何分区。
基本上我有 11 个租户,每个租户需要两个主题。
我很困惑是否要为所有 22 个主题设置一个消费者组,还是有 22 个消费者组?
负载不大,消耗也不是实时的,它是一个离线过程,所以几毫秒的延迟不会有什么坏处。

我对以下几点感到困惑:
1. 如果我有一个消费者组,其中一个消费者在一台机器(JVM - Spring Boot应用程序)上运行,该消费者是否可以使用所有主题都使用单个线程,还是每个主题都有单独的线程?如果是单线程,线程可能会过载。如果有多个线程,我将能够实现并行性(利用所有核心),而无需旋转另一台机器。
2. 如果我有一个消费者组监听所有主题,并且多个消费者在机器上运行(多个JVM - Spring Boot应用程序),将Zookeeper将不同主题的负载分配到不同的机器上?据我所知,来自一个主题的消息将始终发送到一台机器。

例如:如果有 2 个消费者(每台机器一个),一个消费者组监听所有 22 个主题,并且如果 22 个主题同时产生消息,它们是否会分布在 2 台机器之间,也许像来自主题 1-​​11 的消息会发送到机器一从主题 12-22 转到机器二?我只对负载分配感兴趣。

它是否以这种方式工作(假设所有主题的负载相同)?
2 台机器 -> 每台机器来自大约 11 个主题的消息
4 台机器 -> 每台机器来自大约 5 个主题的消息,依此类推。

最佳答案

首先澄清一下概念:

  • 主题只是一个逻辑单元。
  • 消息仅在分区中排序。
  • “我没有任何分区。”不可能。主题必须位于至少一个分区。
  • 消费者组仅用于水平可扩展性。如果你有 5您的主题中的分区以及同一消费者中的 5 个消费者团体。然后Kafka将每个分区分配给一个消费者并消费进程并行工作。

您的问题的答案:

  1. 如果你有一个消费者,那么就会有一个线程(Kafka消费者不是线程安全的),如果你需要并行性,你需要在主题中有多个分区,并且同一消费者组中有相同数量的消费者。一个消费者可以订阅多个主题。
  2. 消费者端没有使用Zookeeper。 (看看this)但是Kafka将分区均匀地分配给消费者。默认情况下,Kafka 保证分区向消费者的公平负载分配。

**也许 this视频有助于更好地理解一些核心概念。

关于java - Kafka : Single consumer group, 无分区和多个主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com