Dan DC
09/10/2021, 9:32 PMDan DC
09/10/2021, 9:34 PMNeha Pawar
Neha Pawar
Dan DC
09/13/2021, 8:25 AMDan DC
09/13/2021, 8:26 AM{
"tableName": "some_table",
"tableType": "OFFLINE",
"segmentsConfig": {
"retentionTimeUnit": "DAYS",
"retentionTimeValue": 730,
"timeColumnName": "posted_timestamp_utc",
"timeType": "MILLISECONDS",
"schemaName": "some_table",
"replicasPerPartition": "1",
"replication": 1
},
"tenants": {},
"tableIndexConfig": {
"loadMode": "MMAP"
},
"ingestionConfig": {
"batchIngestionConfig": {
"segmentIngestionType": "APPEND",
"segmentIngestionFrequency": "HOURLY"
}
},
"metadata": {
"customConfigs": {}
}
}Dan DC
09/13/2021, 8:27 AM{
"tableName": "some_table",
"tableType": "REALTIME",
"segmentsConfig": {
"retentionTimeUnit": "HOURS",
"retentionTimeValue": 12,
"segmentPushType": "APPEND",
"segmentAssignmentStrategy": "BalanceNumSegmentAssignmentStrategy",
"timeColumnName": "posted_timestamp_utc",
"timeType": "MILLISECONDS",
"schemaName": "some_table",
"replicasPerPartition": "1"
},
"tenants": {},
"tableIndexConfig": {
"loadMode": "MMAP",
"streamConfigs": {
...
"stream.kafka.consumer.prop.auto.offset.reset": "smallest",
"group.id": "pinot-table-gorupid",
...
}
},
"task": {
"taskTypeConfigsMap": {
"RealtimeToOfflineSegmentsTask": {
"bucketTimePeriod": "1h",
"bufferTimePeriod": "3h",
"mergeType": "concat",
"maxNumRecordsPerSegment": "1000000"
}
}
},
"metadata": {
"customConfigs": {}
}
}Dan DC
09/13/2021, 8:28 AMDan DC
09/13/2021, 8:29 AMDan DC
09/13/2021, 12:27 PMNeha Pawar
posted_timestamp_utc ?
Can you do a select min(posted_timestamp_utc), max(posted_timestamp_utc) from some_table_REALTIME group by $segmentName order by $segmentName limit 1000 so we can observe the timestamps in each segment?Neha Pawar
Neha Pawar
1 hour at a time, starting from the earliest timestamp available in the realtime table. The minion task runs hourly. So if you have x hours of data in the realtime table, it will take x hours to move it over to offline. Now if x < 12h , the movement is not going to happen in time, and retention will delete themNeha Pawar
x in your case?Neha Pawar
I was actually expecting the low level consumer to restart the ingestion from the earliest offset that still has not been moved to the offline table - the realtime consumption, the retention periodic task, and the realtimeToOffline periodic task are all independent of each other. They are not aware of the progress of the other. It is upto us, to configure retention such that the realtimeToOffline task gets enough time to move over the segmentsDan DC
09/14/2021, 8:58 AMx > 12h instead? I think it makes senseDan DC
09/14/2021, 9:02 AMDan DC
09/14/2021, 9:05 AMNeha Pawar
Neha Pawar
Dan DC
09/14/2021, 5:49 PMDan DC
09/14/2021, 5:50 PMDan DC
09/14/2021, 5:51 PMDan DC
09/14/2021, 5:51 PMNeha Pawar
Dan DC
09/15/2021, 9:21 AMDan DC
09/16/2021, 2:32 PMsegmentsConfig
2) One issue I faced was the retention task getting stuck in running (I don't know why but it happened a couple of times) so no other tasks would be scheduled. This caused retention getting rid of realtime segments and data not making it to the offline table. I used the task API to delete the tasks and then everything went back to normal. I only noticed this when I was sinking every hour - not sure if it is worth adding a troubleshooting section with some advice on where to look and what to do when something like this happens
3) The docs says controller.task.frequencyInSeconds defaults to -1 which is disabled. I had to look at the source code to understand how this controls the task scheduler. Not sure if this should be mentioned in the offline flows doc but a description in the controller configuration would be great.
4) I had to configure deep storage in the minion as well. These settings don't seem to follow the controller/server conventions so it may be work in progress? They are not described in the deep storage configuration doc eitherNeha Pawar
Dan DC
09/16/2021, 5:04 PM