Kafka 0.9.0 单个分区上的多个 Python 消费者线程
Mulitple Python Consumer Threads on a Single Partition with Kafka 0.9.0
对于上下文,我正在尝试将我们的 python 工作进程转移到基于 kafka (0.9.0) 的架构,但我对分区相对于消费者线程的限制感到困惑。一个分区上有多个消费者会导致同一分区上的其他线程等待当前线程完成吗?
我实际上不确定 Kafka 0.9,还没有必要彻底检查新设计,但据我所知,这在 v8 中是不可能的。
这对于低级消费者当然是不可能的,但我也认为,如果你分配的线程多于你在高级消费者中的分区,那么每个分区在任何时候都只有一个线程是活动的。这就是为什么我们说 Kafka 中的并行度是由分区数决定的(对于一个主题,分区数可以动态增加)。
如果您考虑一下,这将需要在消费线程之间的消息级别上进行协调,这会对性能产生不利影响。 v0.8 中的消费者组用于使线程 -> 分区分配成为 Kafka 的责任,而不是在单个分区上协调多个线程。
现在,这可能是在 0.9 中发生了变化,但我对此非常怀疑。
[编辑] 现在我再次阅读您的问题,希望我正确理解了您的问题。我的意思是,每个分区有多个消费者(不是消费者线程)是很正常的事情(每个都有自己的偏移量),所以我假设你问的是 threads/partitions 关系。
对于上下文,我正在尝试将我们的 python 工作进程转移到基于 kafka (0.9.0) 的架构,但我对分区相对于消费者线程的限制感到困惑。一个分区上有多个消费者会导致同一分区上的其他线程等待当前线程完成吗?
我实际上不确定 Kafka 0.9,还没有必要彻底检查新设计,但据我所知,这在 v8 中是不可能的。
这对于低级消费者当然是不可能的,但我也认为,如果你分配的线程多于你在高级消费者中的分区,那么每个分区在任何时候都只有一个线程是活动的。这就是为什么我们说 Kafka 中的并行度是由分区数决定的(对于一个主题,分区数可以动态增加)。
如果您考虑一下,这将需要在消费线程之间的消息级别上进行协调,这会对性能产生不利影响。 v0.8 中的消费者组用于使线程 -> 分区分配成为 Kafka 的责任,而不是在单个分区上协调多个线程。
现在,这可能是在 0.9 中发生了变化,但我对此非常怀疑。
[编辑] 现在我再次阅读您的问题,希望我正确理解了您的问题。我的意思是,每个分区有多个消费者(不是消费者线程)是很正常的事情(每个都有自己的偏移量),所以我假设你问的是 threads/partitions 关系。