piby
06/26/2026, 10:56 AMstream.kafka.isolation.level: read_committed (and confirming the table
picks it up): does not help — segment still gets stuck
- Only workaround: delete table, set ``auto.offset.reset=smallest``, backfill. Works until the next segment rolls — then a new segment gets stuck again at a commit boundary.
It only affects transactional topics. Non-transactional topics are fine.
Do you have any suggestions for me?piby
06/26/2026, 10:57 AM2026/06/26 09:17:34.313 INFO [RealtimeSegmentDataManager_mytable__1__2__20260626T0908Z] [mytable__1__2__20260626T0908Z] Consumed 0 events from (rate:0.0/s), currentOffset=14674563, numRowsConsumedSoFar=216152, numRowsIndexedSoFar=216152
2026/06/26 09:17:57.480 INFO [ClassicKafkaConsumer] [mytable__1__2__20260626T0908Z] [Consumer clientId=mytable_REALTIME-endur_mytable-1, groupId=null] Seeking to offset 14674563 for partition endur_mytable-1
2026/06/26 09:17:57.982 INFO [ClassicKafkaConsumer] [mytable__1__2__20260626T0908Z] [Consumer clientId=mytable_REALTIME-endur_mytable-1, groupId=null] Seeking to offset 14674563 for partition endur_mytable-1
(Earlier, before we set `read_committed`, we also saw — a +1 gap, same partition:)
ERROR [RealtimeSegmentDataManager_pwr_phys_fullsupply_timeseries__0__8__...] Message loss detected in stream partition: 0 for table: myanothertable_REALTIME startOffset: 79028081 batchFirstOffset: 79028082
Environment
- Apache Pinot ***1.5.0***, LOWLEVEL consumers, 3 replicas, 3 partitions
- Stream plugin ***pinot-kafka-3.0*** (kafka30.KafkaConsumerFactory)
- ***AWS MSK***, SASL_SSL / SCRAM-SHA-512, ***transactional*** topics, tiered storage
Sample realtime table config
{
"REALTIME": {
"tableName": "mytable_REALTIME",
"tableType": "REALTIME",
"segmentsConfig": {
"timeColumnName": "timestamp_col",
"replication": "3",
"retentionTimeUnit": "DAYS",
"retentionTimeValue": "15",
"replicasPerPartition": "3",
"segmentPushType": "APPEND",
"segmentAssignmentStrategy": "BalanceNumSegmentAssignmentStrategy",
"minimizeDataMovement": false
},
"tenants": {
"broker": "DefaultTenant",
"server": "DefaultTenant"
},
"tableIndexConfig": {
"nullHandlingEnabled": true,
"rangeIndexVersion": 2,
"loadMode": "MMAP",
"columnMajorSegmentBuilderEnabled": true,
"noDictionarySizeRatioThreshold": 0.85
},
"ingestionConfig": {
"streamIngestionConfig": {
"streamConfigMaps": [
{
"streamType": "kafka",
"stream.kafka.topic.name": "mytopic",
"stream.kafka.consumer.type": "LOWLEVEL",
"stream.kafka.consumer.factory.class.name": "org.apache.pinot.plugin.stream.kafka30.KafkaConsumerFactory",
"stream.kafka.consumer.prop.auto.offset.reset": "smallest",
"stream.kafka.isolation.level": "read_committed",
"stream.kafka.decoder.class.name": "org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder",
"stream.kafka.decoder.prop.format": "JSON",
"sasl.mechanism": "SCRAM-SHA-512",
"security.protocol": "SASL_SSL",
"realtime.segment.flush.threshold.rows": "0",
"realtime.segment.flush.threshold.segment.size": "200M",
"realtime.segment.flush.threshold.time": "24h"
}
],
"pauselessConsumptionEnabled": false,
"disasterRecoveryMode": "DEFAULT",
"columnMajorSegmentBuilderEnabled": true,
"trackFilteredMessageOffsets": false,
"enforceConsumptionInOrder": false,
"useIdealStateToCalculatePreviousSegment": false
},
"continueOnError": true,
"rowTimeValueCheck": true,
"segmentTimeValueCheck": false,
"maxConsecutiveRecordFetchFailuresAllowed": 0
},
"isDimTable": false
}
}piby
06/26/2026, 11:10 AMJinesh Parakh
06/26/2026, 3:01 PMone consuming segment per table wedges in an internal re-seek loop and never advances.Looks similar to https://github.com/apache/pinot/issues/18663 Fixed by https://github.com/apache/pinot/pull/18669
piby
06/26/2026, 3:10 PMJinesh Parakh
06/26/2026, 3:14 PMXiang Fu
Xiang Fu
piby
06/29/2026, 2:06 PMAND processing_time = 1761667561482
AND processing_time = fromTimestamp(fromISO8601('2025-10-28T14:06:01.482Z'));
processing_time is a datetime column of type TIMESTAMP
{
"name": "processing_time",
"dataType": "TIMESTAMP",
"format": "1:MILLISECONDS:EPOCH",
"granularity": "1:MILLISECONDS"
}
The following syntax works:
AND CAST(processing_time AS LONG) = 1761667561482;
AND datetrunc('millisecond', processing_time) = datetrunc('millisecond', fromTimestamp(fromISO8601('2025-10-28T16:06:01.482000Z')));piby
06/29/2026, 5:46 PMYash Mayya
06/29/2026, 6:07 PMpiby
06/29/2026, 6:22 PMYash Mayya
06/29/2026, 7:06 PMpiby
06/29/2026, 7:06 PMpiby
06/30/2026, 3:00 PM