Java 卡夫卡:单一消费群体,无分区,多主题
我有22个主题,在一个主题内排序对我来说很重要。我没有任何分区。Java 卡夫卡:单一消费群体,无分区,多主题,java,multithreading,spring-boot,apache-kafka,message-queue,Java,Multithreading,Spring Boot,Apache Kafka,Message Queue,我有22个主题,在一个主题内排序对我来说很重要。我没有任何分区。 基本上我有11个租户,每个租户需要两个主题。 我不知道是要为所有22个主题设立一个单一的消费群体,还是要设立22个消费群体? 负载不多,消耗不是实时的,这是一个离线过程,所以几毫秒的延迟不会有什么影响 我对以下几点感到困惑: 1.如果我有one消费者组,其中one消费者运行在单个机器(JVM-Spring Boot Application)上,消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程?如果是单个线程,则该线程可
基本上我有11个租户,每个租户需要两个主题。
我不知道是要为所有22个主题设立一个单一的消费群体,还是要设立22个消费群体?
负载不多,消耗不是实时的,这是一个离线过程,所以几毫秒的延迟不会有什么影响 我对以下几点感到困惑:
1.如果我有one消费者组,其中one消费者运行在单个机器(JVM-Spring Boot Application)上,消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程?如果是单个线程,则该线程可能会过载。如果有多个线程,我将能够实现并行(利用所有内核),而无需旋转另一台机器。
2.如果我有一个one消费者组收听所有主题,并且多个消费者在多台机器上运行(多个JVM-Spring Boot应用程序),Zookeeper会将不同主题的负载分配到不同的机器上吗?我知道来自一个主题的消息将始终发送到一台机器 例如: 如果有两个消费者(每台机器一个),一个消费者组收听所有22个主题,并且如果22个主题同时产生消息,它们是否会分布在两台机器上?可能类似于主题1-11发送到机器1,主题12-22发送到机器2?我只是对负荷分配感兴趣 它是这样工作的吗(假设所有主题的负载相等)?
2台机器->每台机器大约11个主题的消息
4台机器->每台机器大约5个主题的消息,依此类推。首先要澄清概念:
- 主题只是一个逻辑单元李>
- 消息只在分区中排序
- “我没有任何分区。”这是不可能的。一个主题必须在 至少一个分区
- 消费者组仅用于水平可伸缩性。如果你有5个 主题中的分区和同一个使用者中的5个使用者 小组。然后,卡夫卡将每个分区分配给一个使用者,并使用它 这个过程是并行的
**也许视频有助于更好地理解一些核心概念。首先要澄清这些概念:
- 主题只是一个逻辑单元李>
- 消息只在分区中排序
- “我没有任何分区。”这是不可能的。一个主题必须在 至少一个分区
- 消费者组仅用于水平可伸缩性。如果你有5个 主题中的分区和同一个使用者中的5个使用者 小组。然后,卡夫卡将每个分区分配给一个使用者,并使用它 这个过程是并行的
如果我有一个消费者群体,在多台机器上运行多个消费者,听所有主题。。。动物园管理员会将不同主题的负载分配到不同的机器上吗 是的,尽管如此,它不是负责这一点的组件 请注意:卡夫卡对机器一无所知,它了解消费者群体和消费者
现在,让我们回答主要问题 我不知道是要为所有22个主题设立一个单一的消费群体,还是要设立22个消费群体 由于每个主题只有一个分区,因此22个使用者具有相同的
group.id
或22个使用者各自仅订阅一个主题是相同的,因为:
每个分区只分配给组中的一个使用者
消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程
答案是使用单个线程,因为文档中说:
卡夫卡消费者不是线程安全的。所有网络I/O都发生在发出调用的应用程序的线程中。用户有责任确保多线程访问正确同步。不同步的访问将导致ConcurrentModificationException
如果我有一个消费者群体,在多台机器上运行多个消费者,听所有主题。。。会