【问题标题】:Increase number of partitions in Dstream to be greater then Kafka partitions in Direct approach将 Dstream 中的分区数增加到大于直接方法中的 Kafka 分区数
【发布时间】:2019-01-28 17:38:43
【问题描述】:

按照 Direct 方法,它们是 32 个 Kafka 分区和 32 个消费者。 但是 32 个消费者的数据处理速度比 Kafka 速率(1.5x)慢,这会导致 Kafka 中的数据积压。

我想增加每个消费者收到的 Dstream 的分区数。

我希望解决方案是增加消费者的分区,而不是增加 Kafka 的分区。

【问题讨论】:

    标签: apache-spark apache-kafka spark-streaming rdd dstream


    【解决方案1】:

    假设你有足够的硬件资源分配给消费者,你可以检查下面的参数

    spark.streaming.kafka.maxRatePerPartition
    

    您可以设置每秒从单个 kafka 分区消耗的记录数。

    【讨论】:

    • 我已经试过了。增加分区可能会有所帮助。会尝试让你知道。每个 kafka 分区的 MaxRate 会在我尝试增​​加它时为我的慢速消费者创建一个积压。
    【解决方案2】:

    在直接流方法中,您最多可以使用#consumers = #partitions。 Kafka 不允许每个 group.id 的每个分区有多个消费者。顺便说一句,您要求每个消费者更多的分区?这无济于事,因为您的消费者已经满负荷运行,但仍然不足。

    您可以尝试进行一些技术更改以减少 kafka 上的数据积压:

    1. 增加分区数 - 尽管您不想这样做,但这仍然是最简单的方法。有时平台只需要更多硬件。

    2. 优化消费者端的处理 - 在处理之前检查重复记录的可能性,减少磁盘 I/O,循环展开技术等以减少消费者花费的时间。

    3. (难度较高)受控数据分布 - 通常发现某些分区能够比其他分区处理得更好。如果您的平台是这种情况,可能值得一看。 Kafka 的数据分发策略有一些偏好(以及 message-key),这通常会导致集群内部负载不均:https://www.cloudera.com/documentation/kafka/latest/topics/kafka_performance.html

    【讨论】:

    • 他们可以破解吗?同一个节点上的分区,没有节点间的shuffle?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    相关资源
    最近更新 更多