@@ -70,8 +70,8 @@ public class KafkaCustomConsumer implements Runnable, ConsumerRebalanceListener
7070
7171 private static final Logger LOG = LoggerFactory .getLogger (KafkaCustomConsumer .class );
7272 private static final Long COMMIT_OFFSET_INTERVAL_MS = 300000L ;
73- private static final int DEFAULT_NUMBER_OF_RECORDS_TO_ACCUMULATE = 1 ;
7473 private static final int RETRY_ON_EXCEPTION_SLEEP_MS = 1000 ;
74+ private static final int BUFFER_WRITE_TIMEOUT = 2000 ;
7575 static final String DEFAULT_KEY = "message" ;
7676
7777 private volatile long lastCommitTime ;
@@ -81,7 +81,6 @@ public class KafkaCustomConsumer implements Runnable, ConsumerRebalanceListener
8181 private final TopicConsumerConfig topicConfig ;
8282 private MessageFormat schema ;
8383 private boolean paused ;
84- private final BufferAccumulator <Record <Event >> bufferAccumulator ;
8584 private final Buffer <Record <Event >> buffer ;
8685 private static final ObjectMapper objectMapper = new ObjectMapper ();
8786 private final JsonFactory jsonFactory = new JsonFactory ();
@@ -137,8 +136,6 @@ public KafkaCustomConsumer(final KafkaConsumer consumer,
137136 this .partitionCommitTrackerMap = new HashMap <>();
138137 this .partitionsToReset = Collections .synchronizedSet (new HashSet <>());
139138 this .schema = MessageFormat .getByMessageFormatByName (schemaType );
140- Duration bufferTimeout = Duration .ofSeconds (1 );
141- this .bufferAccumulator = BufferAccumulator .create (buffer , DEFAULT_NUMBER_OF_RECORDS_TO_ACCUMULATE , bufferTimeout );
142139 this .lastCommitTime = System .currentTimeMillis ();
143140 this .numberOfAcksPending = new AtomicInteger (0 );
144141 this .errLogRateLimiter = new LogRateLimiter (2 , System .currentTimeMillis ());
@@ -492,23 +489,19 @@ private <T> Record<Event> getRecord(ConsumerRecord<String, T> consumerRecord, in
492489 return new Record <Event >(event );
493490 }
494491
495- private void processRecord (final AcknowledgementSet acknowledgementSet , final Record <Event > record ) {
492+ private void processRecords (final AcknowledgementSet acknowledgementSet , final List < Record <Event >> eventRecords ) {
496493 // Always add record to acknowledgementSet before adding to
497494 // buffer because another thread may take and process
498495 // buffer contents before the event record is added
499496 // to acknowledgement set
500497 if (acknowledgementSet != null ) {
501- acknowledgementSet .add (record .getData ());
498+ eventRecords . forEach ( record -> acknowledgementSet .add (record .getData () ));
502499 }
503500 long numRetries = 0 ;
504501 while (true ) {
505502 LOG .debug ("In while loop for processing records, paused = {}" , paused );
506503 try {
507- if (numRetries == 0 ) {
508- bufferAccumulator .add (record );
509- } else {
510- bufferAccumulator .flush ();
511- }
504+ buffer .writeAll (eventRecords , BUFFER_WRITE_TIMEOUT );
512505 break ;
513506 } catch (Exception e ) {
514507 if (!paused && numRetries ++ > maxRetriesOnException ) {
@@ -559,6 +552,7 @@ private <T> void iterateRecordPartitions(ConsumerRecords<String, T> records, fin
559552 }
560553
561554 List <ConsumerRecord <String , T >> partitionRecords = records .records (topicPartition );
555+ final List <Record <Event >> eventRecords = new ArrayList <>();
562556 for (ConsumerRecord <String , T > consumerRecord : partitionRecords ) {
563557 if (schema == MessageFormat .BYTES ) {
564558 InputStream byteInputStream = new ByteArrayInputStream ((byte [])consumerRecord .value ());
@@ -567,24 +561,24 @@ private <T> void iterateRecordPartitions(ConsumerRecords<String, T> records, fin
567561 if (byteDecoder != null ) {
568562 final long receivedTimeStamp = getRecordTimeStamp (consumerRecord , Instant .now ().toEpochMilli ());
569563
570- byteDecoder .parse (decompressedInputStream , Instant .ofEpochMilli (receivedTimeStamp ), (record ) -> {
571- processRecord (acknowledgementSet , record );
572- });
564+ byteDecoder .parse (decompressedInputStream , Instant .ofEpochMilli (receivedTimeStamp ), eventRecords ::add );
573565 } else {
574566 JsonNode jsonNode = objectMapper .readValue (decompressedInputStream , JsonNode .class );
575567
576568 Event event = JacksonLog .builder ().withData (jsonNode ).build ();
577569 Record <Event > record = new Record <>(event );
578- processRecord ( acknowledgementSet , record );
570+ eventRecords . add ( record );
579571 }
580572 } else {
581573 Record <Event > record = getRecord (consumerRecord , topicPartition .partition ());
582574 if (record != null ) {
583- processRecord ( acknowledgementSet , record );
575+ eventRecords . add ( record );
584576 }
585577 }
586578 }
587579
580+ processRecords (acknowledgementSet , eventRecords );
581+
588582 long lastOffset = partitionRecords .get (partitionRecords .size () - 1 ).offset ();
589583 long firstOffset = partitionRecords .get (0 ).offset ();
590584 Range <Long > offsetRange = Range .between (firstOffset , lastOffset );
0 commit comments