@@ -250,7 +250,7 @@ public void splitRestriction(
250250 List <Partition > partitions = restriction .getPartitions ();
251251 partitions .sort (Comparator .comparing (Partition ::getMinTimestamp ));
252252 int pos = 0 ;
253- int reduced = ( int ) Math .sqrt (partitions .size ());
253+ int reduced = Math . max ( minInitialSplits , ( int ) Math .sqrt (partitions .size () ));
254254 if (maxInitialSplits > 0 && reduced > maxInitialSplits ) {
255255 reduced = maxInitialSplits ;
256256 }
@@ -307,6 +307,7 @@ public TypeDescriptor<StreamElement> getOutputTypeDescriptor() {
307307 private final long startStamp ;
308308 private final long endStamp ;
309309 private final int maxInitialSplits ;
310+ private final int minInitialSplits ;
310311
311312 @ VisibleForTesting
312313 BatchLogRead (
@@ -324,16 +325,24 @@ public TypeDescriptor<StreamElement> getOutputTypeDescriptor() {
324325 this .readerFactory = readerFactory ;
325326 this .startStamp = startStamp ;
326327 this .endStamp = endStamp ;
327- this .maxInitialSplits = readInitialSplits (cfg );
328+ this .maxInitialSplits = readMaxInitialSplits (cfg );
329+ this .minInitialSplits = readMinInitialSplits (cfg );
328330 }
329331
330- private int readInitialSplits (Map <String , Object > cfg ) {
332+ private int readMaxInitialSplits (Map <String , Object > cfg ) {
331333 return Optional .ofNullable (cfg .get ("batch.max-initial-splits" ))
332334 .map (Object ::toString )
333335 .map (Integer ::valueOf )
334336 .orElse (-1 );
335337 }
336338
339+ private int readMinInitialSplits (Map <String , Object > cfg ) {
340+ return Optional .ofNullable (cfg .get ("batch.min-initial-splits" ))
341+ .map (Object ::toString )
342+ .map (Integer ::valueOf )
343+ .orElse (-1 );
344+ }
345+
337346 @ Override
338347 public PCollection <StreamElement > expand (PBegin input ) {
339348 long delayMs =
0 commit comments