Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Apache kafka 一个卡夫卡消费者监听多个分区与多个卡夫卡消费者监听多个分区_Apache Kafka - Fatal编程技术网

Apache kafka 一个卡夫卡消费者监听多个分区与多个卡夫卡消费者监听多个分区

Apache kafka 一个卡夫卡消费者监听多个分区与多个卡夫卡消费者监听多个分区,apache-kafka,Apache Kafka,我有十位卡夫卡制作人,每一位都针对不同的主题进行创作 我说不出哪个更有效 让一个使用者监听十个分区,还是让十个使用者监听不同的分区?这两种方式没有区别。但请记住,当您有十个消费者时,将每个消费者连接到卡夫卡会有开销 如果一个使用者能够使用不同的分区,那么这两种方式可能就足够了。这两种方式之间没有区别。但请记住,当您有十个消费者时,将每个消费者连接到卡夫卡会有开销 如果一个使用者能够使用不同的分区,那么性能可能就足够了。通常,如果您有多个使用者,您将能够获得更高的吞吐量,因为您将有多个线程/应用程

我有十位卡夫卡制作人,每一位都针对不同的主题进行创作

我说不出哪个更有效


让一个使用者监听十个分区,还是让十个使用者监听不同的分区?

这两种方式没有区别。但请记住,当您有十个消费者时,将每个消费者连接到卡夫卡会有开销


如果一个使用者能够使用不同的分区,那么这两种方式可能就足够了。

这两种方式之间没有区别。但请记住,当您有十个消费者时,将每个消费者连接到卡夫卡会有开销


如果一个使用者能够使用不同的分区,那么性能可能就足够了。

通常,如果您有多个使用者,您将能够获得更高的吞吐量,因为您将有多个线程/应用程序从kafka群集提取数据,这意味着您将能够跨多个核心,甚至多个服务器进行并行化

然而,你也需要考虑到你想要实现的目标。一个进程/应用程序是否需要查看所有数据?这些消息相互独立吗?所有这些都将告诉您应该如何设计应用程序


在默认配置中,一个主题的所有可用分区将最终分布在具有相同组id的所有使用者之间。因此,您可以有一个使用者,它将自动获取该主题的所有分区。或者您可以实例化十个使用者,在这种情况下,每个使用者将只获得一个分区。

通常,如果您有多个使用者,您将能够获得更高的吞吐量,因为您将有多个线程/应用程序从kafka群集提取数据,这意味着您将能够跨多个核心并行化,可能还有多台服务器

然而,你也需要考虑到你想要实现的目标。一个进程/应用程序是否需要查看所有数据?这些消息相互独立吗?所有这些都将告诉您应该如何设计应用程序


在默认配置中,一个主题的所有可用分区将最终分布在具有相同组id的所有使用者之间。因此,您可以有一个使用者,它将自动获取该主题的所有分区。或者,您可以实例化十个使用者,在这种情况下,每个使用者将只获得一个分区。

在提出问题之前,我已经考虑过使用者不是线程安全的。这是否意味着10个消费者在一个线程上运行?是否?您是对的,
KafkaConsumer
不是线程安全的。但是,这只意味着不应该在线程之间共享使用者实例。您可以跨10个不同的线程安全地运行不同的使用者。如果消息不是相互独立的,那么最佳做法是什么?您可以执行多种操作,例如:在生成消息时为消息分配密钥(例如,为与该用户相关的所有消息分配用户id),确保同一消费者将获得所有相关消息。您也可以简单地使用并立即将消息放入一个内部队列,在该队列中,其他线程将分别处理它们,而不必知道它们来自哪个分区/使用者。在提出问题之前,我已经考虑到使用者不是线程安全的。这是否意味着10个消费者在一个线程上运行?是否?您是对的,
KafkaConsumer
不是线程安全的。但是,这只意味着不应该在线程之间共享使用者实例。您可以跨10个不同的线程安全地运行不同的使用者。如果消息不是相互独立的,那么最佳做法是什么?您可以执行多种操作,例如:在生成消息时为消息分配密钥(例如,为与该用户相关的所有消息分配用户id),确保同一消费者将获得所有相关消息。您还可以简单地使用并立即将消息放入一个内部队列中,在该队列中,其他线程将分别处理它们,而不必知道它们来自哪个分区/使用者。