我有一个简单的Spark Streaming进程(1.6.1),它从Azure Event Hub接收数据。我正在尝试使用back pressure
和maxRate
设置。这是我的配置:
spark.streaming.backpressure.enabled = true
spark.streaming.backpressure.pid.minRate = 900
spark.streaming.receiver.maxRate = 1000
我使用两个receivers
,因此每个微量补丁我会期望2000条消息(总计)。大部分时间这都可以正常工作(总事件数低于或等于maxRate
值)。但有时候我的峰值会违反maxRate
值。
我的测试用例如下:
- send 10k events to azure event hub
- mock job/cluster downtime (no streaming job is running) 60sec delay
- start streaming job
- process events and assert events number smaller or equal to 2000
在那个测试中我可以观察到事件的总次数有时高于2000,例如:2075,2530,2040。它没有明显更高且处理不耗时但是我仍然期望总数每个微量补丁的事件遵守maxRate
值。此外,某些时候事件总数小于backpressure.pid.minRate
,例如:811,631。
我做错了吗?