【问题标题】:Kafka Streams Fault-tolerance understandingKafka Streams 容错理解
【发布时间】:2020-09-30 05:01:05
【问题描述】:

说,我有以下内容:-

  • 具有 20 个分区的单个主题。
  • 我有 10 个独立的实例为流应用程序供电(它们正在从上述主题中消耗)并且在配置中的每个流应用程序上,我添加了 NUM_STREAM_THREADS_CONFIG=5。

以下理解正确吗?

  • 那么我可以在 MAX 总共有 50(10 * 5) 个逻辑任务,但是由于没有分区是 20,所以只有 20 个任务应该被启动!!

此外,由于 Stream-task 的分区分配是偶数,每个分区是否会分配给 20 个任务中的每一个,即每个任务都可以在单个分区上工作?

到目前为止是正确的吗?

感谢您的回复。

【问题讨论】:

  • 看来你的理解是对的。您有问题还是只是在寻求确认?
  • 嘿卡尔森,是的,我正在寻找该领域的专家来确认这一点!

标签: apache-kafka kafka-consumer-api apache-kafka-streams confluent-platform


【解决方案1】:

可以,只要有 20 个分区,Kafka 消费者任务就不能超过 20 个。

由于您在 10 个实例中最多配置了 50 个任务,因此无法保证哪些实例将启动这些任务。在最坏的情况下,最终可能是 4 个实例,每个实例有 5 个任务,或者最好是 10 个实例,每个实例有 2 个任务。

【讨论】:

  • 你确定这个@kazzaki 吗?? Kafka是否不会在内部进行负载平衡并为每个活动流任务分配2个分区,分布在10台机器上?因此,10 个实例中的每一个都应该有 2 个任务处于活动状态!!!
  • 是的.. 虽然它最终会在哪里取决于很多因素/配置。您可以在此处阅读有关消费者再平衡协议的更多详细信息youtube.com/… 微调消费者和 kaka 配置是增加更改以满足 10x2 最佳点的关键。
  • 实际上,KafkaStreams 知道实例和每个实例的线程。并且它将跨实例分配任务(基于它们的容量,即线程数)。因为您的所有实例都具有相同数量的线程,所以您可以期望每个实例将获得相同数量的任务分配。 (答案中的错字?-> have configured 50 tasks -> 我猜应该是 50 threads)?
猜你喜欢
  • 2021-03-05
  • 2019-07-02
  • 2021-10-26
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 2018-07-08
相关资源
最近更新 更多