将Dstream中的分区数量增加到大于Direct方法中的Kafka分区

时间:2018-08-22 12:44:29

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

按照Direct方法,它们有32个Kafka分区和32个使用者。 但是,针对32个使用者的数据处理要慢于Kafka速率(1.5倍),后者会在Kafka中创建积压的数据。

我想增加每个使用者接收的Dstream的分区数量。

我希望解决方案能够解决一些问题,以增加消费者的分区,而不是增加Kafka中的分区。

2 个答案:

答案 0 :(得分:0)

假设您有足够的硬件资源分配给使用者,则可以检查以下参数

spark.streaming.kafka.maxRatePerPartition

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

答案 1 :(得分:0)

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

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

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

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

  3. (更高的难度)受控的数据分发-经常发现某些分区的处理能力优于其他分区。如果您的平台是这种情况,可能值得一看。 Kafka的数据分发策略具有一些首选项(以及消息键),这些首选项通常会导致群集内部负载不均衡:https://www.cloudera.com/documentation/kafka/latest/topics/kafka_performance.html