@@ -141,7 +141,7 @@ private void preventTooManyOutstandingEvents() {
141141
142142 private void handleRaw (final Collection <SinkRecord > records ) {
143143 if (connectorConfig .headerSupport ) {
144- handleRecordsWithHeader (records );
144+ if ( records != null ) { handleRecordsWithHeader (records ); }
145145 }
146146
147147 else if (connectorConfig .hasMetaDataConfigured ()) {
@@ -158,21 +158,63 @@ else if (connectorConfig.hasMetaDataConfigured()) {
158158 }
159159
160160 private void handleRecordsWithHeader (final Collection <SinkRecord > records ) {
161- List <SinkRecord > recordsWithSameHeaders = new ArrayList <>();
162- SplunkSinkRecord splunkSinkRecord = new SplunkSinkRecord ();
161+ HashMap <String , ArrayList <SinkRecord >> recordsWithSameHeaders = new HashMap <>();
163162
164163 for (SinkRecord record : records ) {
165- if (splunkSinkRecord .compareRecordHeaders (record )) {
166- recordsWithSameHeaders .add (record );
167- continue ;
164+ String key = headerId (record );
165+ if (!recordsWithSameHeaders .containsKey (key )) {
166+ ArrayList <SinkRecord > recordList = new ArrayList <SinkRecord >();
167+ recordsWithSameHeaders .put (key , recordList );
168168 }
169+ ArrayList <SinkRecord > recordList = recordsWithSameHeaders .get (key );
170+ recordList .add (record );
171+ recordsWithSameHeaders .put (key , recordList );
172+ }
173+
174+ int index = 0 ;
175+ Iterator <Map .Entry <String , ArrayList <SinkRecord >>> itr = recordsWithSameHeaders .entrySet ().iterator ();
176+ while (itr .hasNext ()) {
177+ Map .Entry set = itr .next ();
178+ String splunkSinkRecordKey = (String )set .getKey ();
179+ ArrayList <SinkRecord > recordArrayList = (ArrayList )set .getValue ();
180+ EventBatch batch = createRawHeaderEventBatch (splunkSinkRecordKey );
181+ sendEvents (recordArrayList , batch );
182+ index ++;
183+ }
184+ log .debug ("{} records have been bucketed in to {} batches" ,records .size (), index );
185+ }
186+
187+ public String headerId (SinkRecord sinkRecord ) {
188+ Headers headers = sinkRecord .headers ();
189+ String headerId = "" ;
190+
191+ if (headers .lastWithName (connectorConfig .headerIndex ) != null ) {
192+ headerId += headers .lastWithName (connectorConfig .headerIndex ).value ().toString ();
193+ }
194+
195+ headerId = insertheaderToken (headerId );
196+
197+ if (headers .lastWithName (connectorConfig .headerHost ) != null ) {
198+ headerId += headers .lastWithName (connectorConfig .headerHost ).value ().toString ();
199+ }
200+
201+ headerId = insertheaderToken (headerId );
169202
170- EventBatch batch = createRawHeaderEventBatch (splunkSinkRecord );
171- sendEvents (recordsWithSameHeaders , batch );
172- recordsWithSameHeaders .clear ();
173- recordsWithSameHeaders .add (record );
174- splunkSinkRecord = new SplunkSinkRecord (record , connectorConfig );
203+ if (headers .lastWithName (connectorConfig .headerSource ) != null ) {
204+ headerId += headers .lastWithName (connectorConfig .headerSource ).value ().toString ();
175205 }
206+
207+ headerId = insertheaderToken (headerId );
208+
209+ if (headers .lastWithName (connectorConfig .headerSourcetype ) != null ) {
210+ headerId += headers .lastWithName (connectorConfig .headerSourcetype ).value ().toString ();
211+ }
212+
213+ return headerId ;
214+ }
215+
216+ public String insertheaderToken (String id ) {
217+ return id + "$$$" ;
176218 }
177219
178220 private void handleEvent (final Collection <SinkRecord > records ) {
@@ -217,15 +259,17 @@ private void send(final EventBatch batch) {
217259 }
218260 }
219261
220- private EventBatch createRawHeaderEventBatch (SplunkSinkRecord splunkSinkRecord ) {
262+ private EventBatch createRawHeaderEventBatch (String splunkSinkRecord ) {
263+ String [] split = splunkSinkRecord .split ("[$]{3}" );
264+
221265 return RawEventBatch .factory ()
222- .setIndex (splunkSinkRecord . getSplunkHeaderIndex () )
223- .setSourcetype (splunkSinkRecord . getSplunkHeaderSourcetype () )
224- .setSource (splunkSinkRecord . getSplunkHeaderSource () )
225- .setHost (splunkSinkRecord . getSplunkHeaderHost () )
266+ .setIndex (split [ 0 ] )
267+ .setSourcetype (split [ 1 ] )
268+ .setSource (split [ 2 ] )
269+ .setHost (split [ 3 ] )
226270 .build ();
227-
228271 }
272+
229273 // setup metadata on RawEventBatch
230274 private EventBatch createRawEventBatch (final TopicPartition tp ) {
231275 if (tp == null ) {
0 commit comments