我正在调用spark-submit传递maxRate,我有一个kinesis接收器,以及1s批次
Text Score
1 morning 1
2 bliss 0
3 great 1
4 happy 0
然而,单个批次可能会大大超过已建立的maxRate。即:我得到300条记录。
我错过了任何设置吗?
答案 0 :(得分:2)
对我来说这看起来像个错误。从代码中探讨,看起来Kinesis完全忽略了spark.streaming.receiver.maxRate
配置。
如果您查看KinesisReceiver.onStart
内部,您会看到:
val kinesisClientLibConfiguration =
new KinesisClientLibConfiguration(checkpointAppName, streamName, awsCredProvider, workerId)
.withKinesisEndpoint(endpointUrl)
.withInitialPositionInStream(initialPositionInStream)
.withTaskBackoffTimeMillis(500)
.withRegionName(regionName)
此构造函数最终调用另一个构造函数,该构造函数具有许多配置的默认值:
public KinesisClientLibConfiguration(String applicationName,
String streamName,
AWSCredentialsProvider kinesisCredentialsProvider,
AWSCredentialsProvider dynamoDBCredentialsProvider,
AWSCredentialsProvider cloudWatchCredentialsProvider,
String workerId) {
this(applicationName, streamName, null, DEFAULT_INITIAL_POSITION_IN_STREAM, kinesisCredentialsProvider,
dynamoDBCredentialsProvider, cloudWatchCredentialsProvider, DEFAULT_FAILOVER_TIME_MILLIS, workerId,
DEFAULT_MAX_RECORDS, DEFAULT_IDLETIME_BETWEEN_READS_MILLIS,
DEFAULT_DONT_CALL_PROCESS_RECORDS_FOR_EMPTY_RECORD_LIST, DEFAULT_PARENT_SHARD_POLL_INTERVAL_MILLIS,
DEFAULT_SHARD_SYNC_INTERVAL_MILLIS, DEFAULT_CLEANUP_LEASES_UPON_SHARDS_COMPLETION,
new ClientConfiguration(), new ClientConfiguration(), new ClientConfiguration(),
DEFAULT_TASK_BACKOFF_TIME_MILLIS, DEFAULT_METRICS_BUFFER_TIME_MILLIS, DEFAULT_METRICS_MAX_QUEUE_SIZE,
DEFAULT_VALIDATE_SEQUENCE_NUMBER_BEFORE_CHECKPOINTING, null);
}
您关心的是DEFAULT_MAX_RECORDS
,它始终设置为10,000条记录。 KinesisClientLibConfiguration
上有一个名为withMaxRecords
的方法,您可以调用它来设置实际的记录数。这应该是一个简单的解决方法。
但就目前而言,似乎Kinesis接收器并不尊重该参数。
答案 1 :(得分:2)
供将来参考。
这是Spark 2.2.0
版本中已修复的已知bug