Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡:单一消费群体,无分区,多主题_Java_Multithreading_Spring Boot_Apache Kafka_Message Queue - Fatal编程技术网

Java 卡夫卡:单一消费群体,无分区,多主题

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)上,消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程?如果是单个线程,则该线程可

我有22个主题,在一个主题内排序对我来说很重要。我没有任何分区。
基本上我有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个使用者 小组。然后,卡夫卡将每个分区分配给一个使用者,并使用它 这个过程是并行的
回答你的问题:

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

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

    首先要澄清这些概念:

    • 主题只是一个逻辑单元
    • 消息只在分区中排序
    • “我没有任何分区。”这是不可能的。一个主题必须在 至少一个分区
    • 消费者组仅用于水平可伸缩性。如果你有5个 主题中的分区和同一个使用者中的5个使用者 小组。然后,卡夫卡将每个分区分配给一个使用者,并使用它 这个过程是并行的
    回答你的问题:

  • 如果您有一个使用者,那么将有一个线程(Kafka使用者不是线程安全的),如果您需要并行,那么您需要在主题中有多个分区,并且在同一使用者组中有相同数量的使用者。消费者可以订阅多个主题
  • 在用户端不使用Zookeeper。(看一看)但是Kafka将分区均匀地分配给消费者。默认情况下,Kafka保证分区向使用者公平分配负载
  • **也许视频有助于更好地理解一些核心概念

    消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程

    答案是使用单个线程,因为文档中说:

    卡夫卡消费者不是线程安全的。所有网络I/O都发生在发出调用的应用程序的线程中。用户有责任确保多线程访问正确同步。不同步的访问将导致ConcurrentModificationException


    如果我有一个消费者群体,在多台机器上运行多个消费者,听所有主题。。。动物园管理员会将不同主题的负载分配到不同的机器上吗

    是的,尽管如此,它不是负责这一点的组件

    请注意:卡夫卡对机器一无所知,它了解消费者群体和消费者


    现在,让我们回答主要问题

    我不知道是要为所有22个主题设立一个单一的消费群体,还是要设立22个消费群体

    由于每个主题只有一个分区,因此22个使用者具有相同的
    group.id
    或22个使用者各自仅订阅一个主题是相同的,因为:

    每个分区只分配给组中的一个使用者

    消费者是使用单个线程处理所有主题,还是每个主题都有单独的线程

    答案是使用单个线程,因为文档中说:

    卡夫卡消费者不是线程安全的。所有网络I/O都发生在发出调用的应用程序的线程中。用户有责任确保多线程访问正确同步。不同步的访问将导致ConcurrentModificationException


    如果我有一个消费者群体,在多台机器上运行多个消费者,听所有主题。。。会