@@ -146,6 +146,8 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
146146 // will have changed so we may have gone from last with no assignments to
147147 // having some.
148148 this . #consumer. on ( 'consumer:group:join' , ( ) => {
149+ this . #offsetsCommitted. clear ( )
150+
149151 this . #refreshOffsets( ( error : Error | null ) => {
150152 /* c8 ignore next 4 - Hard to test */
151153 if ( error ) {
@@ -169,6 +171,19 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
169171 notifyCreation ( 'messages-stream' , this )
170172 }
171173
174+ get offsetsToFetch ( ) : Map < string , bigint > {
175+ return this . #offsetsToFetch
176+ }
177+
178+ get offsetsToCommit ( ) : Map < string , CommitOptionsPartition > {
179+ return this . #offsetsToCommit
180+ }
181+
182+ get offsetsCommitted ( ) : Map < string , bigint > {
183+ return this . #offsetsCommitted
184+ }
185+
186+ // TODO: This is deprecated alias, remove in future major version
172187 get committedOffsets ( ) : Map < string , bigint > {
173188 return this . #offsetsCommitted
174189 }
@@ -279,6 +294,7 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
279294 */
280295 addListener ( event : 'autocommit' , listener : ( err : Error , offsets : CommitOptionsPartition [ ] ) => void ) : this
281296 addListener ( event : 'fetch' , listener : ( ) => void ) : this
297+ addListener ( event : 'offsets' , listener : ( ) => void ) : this
282298 addListener ( event : 'data' , listener : ( message : Message < Key , Value , HeaderKey , HeaderValue > ) => void ) : this
283299 addListener ( event : 'close' , listener : ( ) => void ) : this
284300 addListener ( event : 'end' , listener : ( ) => void ) : this
@@ -293,6 +309,7 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
293309
294310 on ( event : 'autocommit' , listener : ( err : Error , offsets : CommitOptionsPartition [ ] ) => void ) : this
295311 on ( event : 'fetch' , listener : ( ) => void ) : this
312+ on ( event : 'offsets' , listener : ( ) => void ) : this
296313 on ( event : 'data' , listener : ( message : Message < Key , Value , HeaderKey , HeaderValue > ) => void ) : this
297314 on ( event : 'close' , listener : ( ) => void ) : this
298315 on ( event : 'end' , listener : ( ) => void ) : this
@@ -307,6 +324,7 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
307324
308325 once ( event : 'autocommit' , listener : ( err : Error , offsets : CommitOptionsPartition [ ] ) => void ) : this
309326 once ( event : 'fetch' , listener : ( ) => void ) : this
327+ once ( event : 'offsets' , listener : ( ) => void ) : this
310328 once ( event : 'data' , listener : ( message : Message < Key , Value , HeaderKey , HeaderValue > ) => void ) : this
311329 once ( event : 'close' , listener : ( ) => void ) : this
312330 once ( event : 'end' , listener : ( ) => void ) : this
@@ -321,6 +339,7 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
321339
322340 prependListener ( event : 'autocommit' , listener : ( err : Error , offsets : CommitOptionsPartition [ ] ) => void ) : this
323341 prependListener ( event : 'fetch' , listener : ( ) => void ) : this
342+ prependListener ( event : 'offsets' , listener : ( ) => void ) : this
324343 prependListener ( event : 'data' , listener : ( message : Message < Key , Value , HeaderKey , HeaderValue > ) => void ) : this
325344 prependListener ( event : 'close' , listener : ( ) => void ) : this
326345 prependListener ( event : 'end' , listener : ( ) => void ) : this
@@ -335,6 +354,7 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
335354
336355 prependOnceListener ( event : 'autocommit' , listener : ( err : Error , offsets : CommitOptionsPartition [ ] ) => void ) : this
337356 prependOnceListener ( event : 'fetch' , listener : ( ) => void ) : this
357+ prependOnceListener ( event : 'offsets' , listener : ( ) => void ) : this
338358 prependOnceListener ( event : 'data' , listener : ( message : Message < Key , Value , HeaderKey , HeaderValue > ) => void ) : this
339359 prependOnceListener ( event : 'close' , listener : ( ) => void ) : this
340360 prependOnceListener ( event : 'end' , listener : ( ) => void ) : this
@@ -774,6 +794,24 @@ export class MessagesStream<Key, Value, HeaderKey, HeaderValue> extends Readable
774794 }
775795 }
776796
797+ // Rebuild the list of offsetsCommitted (which is used for consumer lag) out of the offsets to fetch
798+ for ( const topic of this . #topics) {
799+ const assignment = this . #assignmentsForTopic( topic )
800+
801+ // This consumer has no assignment for the topic, continue
802+ if ( ! assignment ) {
803+ continue
804+ }
805+
806+ const partitions = assignment . partitions
807+
808+ for ( const partition of partitions ) {
809+ const committed = this . #offsetsToFetch. get ( `${ topic } :${ partition } ` ) !
810+ this . #offsetsCommitted. set ( `${ topic } :${ partition } ` , committed - 1n )
811+ }
812+ }
813+
814+ this . emit ( 'offsets' )
777815 callback ( null )
778816 }
779817
0 commit comments