You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pinot.apache.org by Pinot Slack Email Digest <sn...@apache.org> on 2020/08/18 02:00:41 UTC

Apache Pinot Daily Email Digest (2020-08-17)

<h3><u>#general</u></h3><br><strong>@npawar: </strong>Hi all, We’re planning to add a feature to move segments from realtime table to offline table. The motivation is to eliminate the need for user to setup their own offline flows for a hybrid table, and let Pinot manage that.
Here’s the design doc, called Pinot managed offline flows, if anyone wants to take a look : <https://u17000708.ct.sendgrid.net/ls/click?upn=1BiFF0-2FtVRazUn1cLzaiMc9VK8AZw4xfCWnhVjqO8F0jpwxWv4fC4LAZTjvhd54Mnnp7A4BBhAtbRr8NR9LakFgJLRyTGnwArJQe4yssb40dhFrQ9yz-2FdfNludwvq-2FFP-2FKCFpQ-2BL7BgQO4LK98rpmA-3D-3DIKYA_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2JeQebt005OYjXZym6K9A4ptaRAbRRTHeA6HnmJ1FLebnrL6AV-2BnFY9jhsZydYKCwisgxpxvJyuHkOh7xiiBp4r77J-2F-2BVy6xJdIfg-2Fgz-2F8BTGxrUdwdI0Kn1hr7-2BjFpAaV4SNRS6BBOZRGexNjztHlyyaR3riszfoDJ9gjiHFiAXY-3D><br><strong>@adrian.f.cole: </strong>aloha. I was wondering what the client upgrade policy would be for org.apache.pinot:pinot-java-client and org.apache.pinot:pinot-tools wrt order<br><h3><u>#troubleshooting</u></h3><br><strong>@laxman: </strong>Hey Folks.

Facing some issues while trying to enable pinot controller HA. Earlier, multiple controllers are there but they were using local directory. Now, we changed this to _gcs_ path.

After this, we notice segments are getting uploaded without any issues. However, we see errors while trying to download these segments from gcs on demand.<br><strong>@mayanks: </strong>what's the segment downoad url you see in the segmentZkMetadata?<br><strong>@laxman: </strong>I see http url<br><strong>@laxman: </strong>Here is the error
<br><strong>@laxman: </strong>```2020/08/17 15:49:55.661 ERROR [SegmentOnlineOfflineStateModelFactory$SegmentOnlineOfflineStateModel] [HelixTaskExecutor-message_handle_thread] Caught exception in state transition from OFFLINE -&gt; ONLINE for resource: rawServiceView_REALTIME, partition: rawServiceView__3__31__20200815T1540Z
java.lang.RuntimeException: org.apache.pinot.spi.utils.retry.AttemptsExceededException: Operation failed after 3 attempts
	at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.downloadAndReplaceSegment(RealtimeTableDataManager.java:285) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.addSegment(RealtimeTableDataManager.java:251) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.server.starter.helix.HelixInstanceDataManager.addRealtimeSegment(HelixInstanceDataManager.java:132) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.server.starter.helix.SegmentOnlineOfflineStateModelFactory$SegmentOnlineOfflineStateModel.onBecomeOnlineFromOffline(SegmentOnlineOfflineStateModelFactory.java:164) [pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_265]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_265]
	at org.apache.helix.messaging.handling.HelixStateTransitionHandler.invoke(HelixStateTransitionHandler.java:404) [pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.helix.messaging.handling.HelixStateTransitionHandler.handleMessage(HelixStateTransitionHandler.java:331) [pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:97) [pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:49) [pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_265]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_265]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_265]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_265]
Caused by: org.apache.pinot.spi.utils.retry.AttemptsExceededException: Operation failed after 3 attempts
	at org.apache.pinot.spi.utils.retry.BaseRetryPolicy.attempt(BaseRetryPolicy.java:61) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.common.utils.fetcher.HttpSegmentFetcher.fetchSegmentToLocal(HttpSegmentFetcher.java:40) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.common.utils.fetcher.SegmentFetcherFactory.fetchSegmentToLocal(SegmentFetcherFactory.java:108) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.common.utils.fetcher.SegmentFetcherFactory.fetchSegmentToLocal(SegmentFetcherFactory.java:116) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	at org.apache.pinot.core.data.manager.realtime.RealtimeTableDataManager.downloadAndReplaceSegment(RealtimeTableDataManager.java:277) ~[pinot-all-0.4.0-SNAPSHOT-jar-with-dependencies.jar:0.4.0-SNAPSHOT-889889e2020f0fcbd2ef316b7fd7fe3eb985c65a]
	... 14 more```<br><strong>@mayanks: </strong>Does it look like valid gcs path?<br><strong>@mailtobuchi: </strong>@mailtobuchi has joined the channel<br><strong>@laxman: </strong>Segment metadata for above segment
```{
  "segment.realtime.endOffset": "410508",
  "segment.time.unit": "MILLISECONDS",
  "segment.start.time": "1597505986487",
  "segment.flush.threshold.size": "13037",
  "segment.realtime.startOffset": "398812",
  "segment.end.time": "1597527578602",
  "segment.total.docs": "11696",
  "segment.table.name": "rawServiceView_REALTIME",
  "segment.realtime.numReplicas": "1",
  "segment.creation.time": "1597506020322",
  "segment.realtime.download.url": "<https://u17000708.ct.sendgrid.net/ls/click?upn=iSrCRfgZvz-2BV64a3Rv7HYatTHeqKcLaMSt8ep4ihF7S15aoAmeINWhSdVw7SqjxLtG0H3i4f81kx0fvQBcFsCGtWZbggomj6M8u1RksO5-2B3Ep5t7tJhBD685RnzcqYNPMwpfGXObjKZwxKk3nGaK4Cc93dMdtjw6oxcihNIwHyj7YwY-2BIhzYnxBDYc3FwdlaFVjTxYBuPeBvVz9KU5wOVA-3D-3D4Ua4_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2J7a5gr43OW1CfB8lO6jNUDzs1JTDvkOzPKvwN5g7z4rKnjaivqTUaVwNsR-2BVMsFhm0-2B5u5h-2BwZQcxXY-2FFeFYI8kF9f9y7glDHtEao2LuNcN-2Fpu05Oiy554WC7TTFRo-2FpjNCww9VVwoQljlrczL7LeaDs1TBPaO81aTzpZffb-2FTbI-3D>",
  "segment.name": "rawServiceView__3__31__20200815T1540Z",
  "segment.index.version": "v3",
  "custom.map": null,
  "segment.flush.threshold.time": null,
  "segment.type": "REALTIME",
  "segment.crc": "2161937309",
  "segment.realtime.status": "DONE"
}```<br><strong>@mayanks: </strong>Hmm, it should be gcs path<br><strong>@laxman: </strong>No @mayanks. Its http path.<br><strong>@laxman: </strong>Even current segments that getting prepared its http path only…<br><strong>@mayanks: </strong>Then how do you know you are using gcs?<br><strong>@laxman: </strong>We see data in gcs<br><strong>@laxman: </strong>Is this related to this ticket? I see this is still open
<https://u17000708.ct.sendgrid.net/ls/click?upn=1BiFF0-2FtVRazUn1cLzaiMSfW2QiSG4bkQpnpkSL7FiK3MHb8libOHmhAW89nP5XKOMtdHO0f8MgDJj44LL4s9g-3D-3DhNDV_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2JKHLcnK78-2FtpEYa7fgEr08VD-2BCN0qmCb9GzIcd7l25jw4E90HFhePiSmHSp-2Fm2R5g-2FAZvH86p7y3H4JzHtyb-2FKUkbsPP5i-2FzeMcavA6PY59Fj6Opm5bI9jwNfIHobqI0AflXV5Fs4o8EKug-2Bkx1xj6bLdUNxJMj-2FOeHliGzaE9rQ-3D><br><strong>@mayanks: </strong>I thought I saw a fix from @kharekartik for S3 on this?<br><strong>@g.kishore: </strong>Ting fixed it<br><strong>@laxman: </strong>But issue is still open. Must be a duplicate.
<https://u17000708.ct.sendgrid.net/ls/click?upn=1BiFF0-2FtVRazUn1cLzaiMSfW2QiSG4bkQpnpkSL7FiK3MHb8libOHmhAW89nP5XKOMtdHO0f8MgDJj44LL4s9g-3D-3DNSJz_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2J3ZMKGCEt7bB-2BCFVFfBlBBNU9CTJ5rEaiH-2B3YcLV2BsYnAaz1ubfpVgU1TcD4YBQzLxVjY-2Bfm7ZmfTqFsBeBEdOcgNZbYHsRK38DtAcpW8c26-2BWS-2BdOCu-2By-2BGw1-2FE-2BIioCewiSHsNKieou5Pxilq2ekjioKY6f20WQdd7mUZwA-2BU-3D><br><strong>@g.kishore: </strong>i think he fixed it as part of another PR<br><strong>@g.kishore: </strong>@tingchen ^^<br><strong>@tingchen: </strong>@tingchen has joined the channel<br><strong>@laxman: </strong>ok. Can you please point me to the PR or version where this is fixed?<br><strong>@laxman: </strong>Also, what happens to the metadata for the segments when gcs was not enabled? Do we have a tool to fix the existing metadata?<br><strong>@g.kishore: </strong>no, but its a good idea to write one, should be simple. Do you want to give it a shot, we can guide you<br><strong>@laxman: </strong>Sure Kishore. I’m already trying it for a segment by manually changing the segment metadata in zookeeper using zk-cli.<br><strong>@laxman: </strong>Meanwhile, Can you please point me to the PR or version where this is fixed?<br><strong>@laxman: </strong>We are currently on 0.3.0 version<br><strong>@g.kishore: </strong>the fix should be available in 0.5.0 (going out this week)<br><strong>@elon.azoulay: </strong>@laxman - in your controller config do you have the following set?
```<https://u17000708.ct.sendgrid.net/ls/click?upn=iSrCRfgZvz-2BV64a3Rv7HYW-2BdYW0ptchY-2BP-2BLfi4LyHkcaxbuXKFIoiXYEsYVXcpYYBf-2BdwiZT0qqw2z3EQg9zQCFGWO-2FMC1IqCNwCAbY5rScdCvddZ6DBJX1hLX79Jl3uhJwuJu5xIQ3OGpmhA7oaQ-3D-3Dqs3L_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2J3SsyEYl0IL599vr3AlA4TghtCURNFS-2Bnji3OLH-2B7s2Uzwic6aYGm3X5j5JfbJi3Z388orIhyyj8DTF9aWlbGaxF0ywxPXkVA3mOjFnPNZ-2FocOjn-2FJIFyTQshjy5CIfHCHN-2BCYlHiAanFdqxW2nn2LVtO-2FAMEqXboG59SQiCJzj8-3D>=org.apache.pinot.plugin.filesystem.GcsPinotFS
pinot.controller.storage.factory.gs.projectId=&lt;YOUR PROJECT ID&gt;
pinot.controller.storage.factory.gs.gcpKey=&lt;GCS KEY&gt;
pinot.controller.segment.fetcher.protocols=file,http,gs
pinot.controller.segment.fetcher.gs.class=org.apache.pinot.common.utils.fetcher.PinotFSSegmentFetcher```<br><strong>@elon.azoulay: </strong>We had ha controllers (3 of them) in pinot 0.3.0 and 0.4.0 and this worked for us.<br><strong>@laxman: </strong>Segment download flow from gcs doesn’t work
Here is the ticket:
<https://u17000708.ct.sendgrid.net/ls/click?upn=1BiFF0-2FtVRazUn1cLzaiMSfW2QiSG4bkQpnpkSL7FiK3MHb8libOHmhAW89nP5XK4-2BMLL5cZIm1dZPgaxnPiQw-3D-3DaDnt_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2JfltSv42HdYE6B20yGX88ygO0DVWT9arm83Mkk5sE1v-2BfwHZZLQWkQToBBLyvsE9OIJ25ZRuHRsUSsLDaNQVNWNNIhbo73DA2W-2BJgGj1ncLS8IPofsvRugi-2Bd9t3gNByRyzlOjHoX8i2Fjp7G-2B99pY01Bmi2lUR-2BWNHWm7rx77Hw-3D><br><strong>@elon.azoulay: </strong>qq - for offline segment generation: In SegmentGeneratorConfig should either autoGeneratedInvertedIndex or createInvertedIndexDuringSegmentGeneration be set to true for inverted indexes to get generated?<br><strong>@elon.azoulay: </strong>And another question for offline segment generation - just want to confirm that sortedIndex is not used by offline, we have to provide the sorted data, is that right?<br><strong>@christian: </strong>I’m running into an issue with the Broker in an ERROR state for Offline tables that are backfilled using the `SegmentCreationAndTarPush` Spark Ingestion job. When I query the hybrid table for the min of the table it only returns the min of the realtime tables and not the OFFLINE segments. When I query `localhost:9500/segments/TABLE_NAME` it show both OFFLINE and ONLINE segments. I’m looking for guidance on where to look to start debugging OFFLINE tables in   `"ERROR"` an error state from the broker’s perspective. We are using S3FileSystem.

```"sys_oops_OFFLINE": {
      "CURRENT_STATE": "ERROR",
      "END_TIME": "1597271220022",
      "INFO": "",
      "PREVIOUS_STATE": "OFFLINE",
      "START_TIME": "1597271219800",
      "TRIGGERED_BY": "pinot-controller-0.pinot-controller-headless.pinot.svc.cluster.local_9000"
    },
"sys_reboot_OFFLINE": {
      "CURRENT_STATE": "ERROR",
      "END_TIME": "1597271219935",
      "INFO": "",
      "PREVIOUS_STATE": "OFFLINE",
      "START_TIME": "1597271219798",
      "TRIGGERED_BY": "pinot-controller-0.pinot-controller-headless.pinot.svc.cluster.local_9000"
    }```<br><strong>@g.kishore: </strong>What’s in ERROR state?<br><strong>@christian: </strong><br><strong>@christian: </strong>When I look at `ERRORS` within the Broker Instance it’s an empty `{}`<br><strong>@g.kishore: </strong>You should see something in that broker log <br><strong>@g.kishore: </strong>Can you check?<br><strong>@christian: </strong>should I just delete the offline table and recreate it again?<br><strong>@christian: </strong>```[HelixTaskExecutor-message_handle_thread] Caught exception while processing transition from OFFLINE to │
│ java.lang.IllegalStateException: Failed to find schema for table: DnsForwarderServiceStatus_OFFLINE                                                                                 │
│     at shaded.com.google.common.base.Preconditions.checkState(Preconditions.java:518) ~[pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPSHOT-0fc081157c88734af0433c3cd │
│     at org.apache.pinot.broker.routing.timeboundary.TimeBoundaryManager.&lt;init&gt;(TimeBoundaryManager.java:70) ~[pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPSHOT-0fc │
│     at org.apache.pinot.broker.routing.RoutingManager.buildRouting(RoutingManager.java:332) ~[pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPSHOT-0fc081157c88734af04 │
│     at org.apache.pinot.broker.broker.helix.BrokerResourceOnlineOfflineStateModelFactory$BrokerResourceOnlineOfflineStateModel.onBecomeOnlineFromOffline(BrokerResourceOnlineOfflin │
│     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_262]                                                                                                   │
│     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_262]                                                                                 │
│     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_262]                                                                         │
│     at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_262]                                                                                                              │
│     at org.apache.helix.messaging.handling.HelixStateTransitionHandler.invoke(HelixStateTransitionHandler.java:404) [pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPS │
│     at org.apache.helix.messaging.handling.HelixStateTransitionHandler.handleMessage(HelixStateTransitionHandler.java:331) [pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5. │
│     at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:97) [pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPSHOT-0fc081157c88734af0433c3cd30f310474d │
│     at org.apache.helix.messaging.handling.HelixTask.call(HelixTask.java:49) [pinot-all-0.5.0-SNAPSHOT-jar-with-dependencies.jar:0.5.0-SNAPSHOT-0fc081157c88734af0433c3cd30f310474d │
│     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_262]                                                                                                       │
│     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_262]                                                                                │
│     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_262]                                                                                │
│     at java.lang.Thread.run(Thread.java:748) [?:1.8.0_262]```<br><strong>@christian: </strong>Still getting the same error after restarting, the schema is the same as the realtime table schema<br><strong>@g.kishore: </strong>Do you have a hen for the table?<br><strong>@g.kishore: </strong>Sorry :neutral_face: <br><strong>@g.kishore: </strong>Schema <br><strong>@christian: </strong>yup, the schema is used in the realtime table so I know it exists<br><strong>@g.kishore: </strong>Paste the offline table config?<br><strong>@christian: </strong>```{
    "OFFLINE": {
        "tableName": "DnsForwarderServiceStatus_OFFLINE",
        "tableType": "OFFLINE",
        "segmentsConfig": {
            "timeType": "MILLISECONDS",
            "schemaName": "olap_enriched_dns_forwarder_service_status",
            "timeColumnName": "cloud_timestamp_ms",
            "replication": "1",
            "replicasPerPartition": "1",
            "segmentAssignmentStrategy": "BalanceNumSegmentAssignmentStrategy"
        },
        "tenants": {
            "broker": "DefaultTenant",
            "server": "DefaultTenant"
        },
        "tableIndexConfig": {
            "createInvertedIndexDuringSegmentGeneration": false,
            "noDictionaryColumns": [],
            "enableDefaultStarTree": false,
            "enableDynamicStarTreeCreation": false,
            "aggregateMetrics": true,
            "nullHandlingEnabled": true,
            "loadMode": "MMAP",
            "invertedIndexColumns": [
                
            ],
            "autoGeneratedInvertedIndex": false
        },
        "metadata": {
            "customConfigs": {}
        }
    },
    "REALTIME": {
        "tableName": "DnsForwarderServiceStatus_REALTIME",
        "tableType": "REALTIME",
        "segmentsConfig": {
            "timeType": "MILLISECONDS",
            "schemaName": "olap_enriched_dns_forwarder_service_status",
            "timeColumnName": "cloud_timestamp_ms",
            "retentionTimeUnit": "DAYS",
            "retentionTimeValue": "30",
            "replication": "1",
            "replicasPerPartition": "1",
            "segmentAssignmentStrategy": "BalanceNumSegmentAssignmentStrategy"
        },
        "tenants": {
            "broker": "DefaultTenant",
            "server": "DefaultTenant"
        },
        "tableIndexConfig": {
            "createInvertedIndexDuringSegmentGeneration": false,
            "noDictionaryColumns": [],
            "enableDefaultStarTree": false,
            "enableDynamicStarTreeCreation": false,
            "aggregateMetrics": true,
            "nullHandlingEnabled": true,
            "streamConfigs": {
                "streamType": "kafka",
                "stream.kafka.consumer.type": "lowlevel",
                "stream.kafka.topic.name": "olap-enriched-dns-forwarder-service-status",
                "stream.kafka.decoder.class.name": "org.apache.pinot.plugin.stream.kafka.KafkaJSONMessageDecoder",
                "stream.kafka.consumer.factory.class.name": "org.apache.pinot.plugin.stream.kafka20.KafkaConsumerFactory",
                "stream.kafka.broker.list": "KAFKA_URL",
                "realtime.segment.flush.threshold.time": "30m",
                "realtime.segment.flush.threshold.size": "100000",
                "stream.kafka.consumer.prop.auto.offset.reset": "largest",
                "stream.kafka.zk.broker.url": "ZK_URL"
            },
            "loadMode": "MMAP",
            "invertedIndexColumns": [
                
            ],
            "autoGeneratedInvertedIndex": false
        },
        "metadata": {
            "customConfigs": {}
        }
    }
}```<br><strong>@g.kishore: </strong>Looks right to me<br><strong>@christian: </strong>hmm<br><strong>@npawar: </strong>i think there was some recent change where schema name should match the table name.<br><strong>@christian: </strong><br><strong>@npawar: </strong>```Schema schema = ZKMetadataProvider.getTableSchema(_propertyStore, _offlineTableName);
    Preconditions.checkState(schema != null, "Failed to find schema for table: %s", _offlineTableName);```
this is throwing the exception. it needs schema with name = DnsForwarderServiceStatus<br><strong>@christian: </strong>ah! thank you so much!<br><strong>@npawar: </strong>upload same schema with DnsForwarderServiceStatus name, and also, update the schema name in tableConfigs<br><strong>@christian: </strong>that fixed it!<br><strong>@christian: </strong>thanks so much<br><h3><u>#release-certifier</u></h3><br><strong>@mailtobuchi: </strong>@mailtobuchi has joined the channel<br><h3><u>#pinot-0-5-0-release</u></h3><br><strong>@tingchen: </strong>I got denied when trying to commit to the pinot origin.<br><strong>@tingchen: </strong>```tingchen-C02WW14QHTDG:incubator-pinot tingchen$ git push --set-upstream origin release-0.5.0-rc1
remote: Permission to apache/incubator-pinot.git denied to chenboat.
fatal: unable to access '<https://u17000708.ct.sendgrid.net/ls/click?upn=1BiFF0-2FtVRazUn1cLzaiMSfW2QiSG4bkQpnpkSL7FiK3MHb8libOHmhAW89nP5XKz3ZRdyLTRwG-2BZEDSfIF9jA-3D-3DVtI9_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2J7whtgxhAqLA5U09isxVGYaJ6tEwHEFWlMpM-2BEzWc2cjNCiwkBphENQt0nTiiDxAWVkmwDhNJoLl1LmezcNWbdvQA6FWWy6P-2BrfGcPVU6pqyRr-2FwChf4gcIMV6Dne86-2B6ohUI0dx4b41NE5RJOfo9DMlg6isPA4JRVR1m9zBfn10-3D>': The requested URL returned error: 403```
<br><strong>@tingchen: </strong>I have linked my github account chenboat to the apache id <ma...@apache.org>.<br><strong>@tingchen: </strong>Is the error due to the committer list not refreshed or I enter the wrong login auth info?<br><strong>@tingchen: </strong>@npawar @g.kishore @fx19880617<br><strong>@fx19880617: </strong>do you have write permission on the github repo?<br><strong>@g.kishore: </strong>have you added your github id on <https://u17000708.ct.sendgrid.net/ls/click?upn=iSrCRfgZvz-2BV64a3Rv7HYRe4D53SBLSrbBa0DjRPxsaAw4MSKofH-2BH56HLrUGu5WwukF_vGLQYiKGfBLXsUt3KGBrxeq6BCTMpPOLROqAvDqBeTzaKAqb5Z6Co9dWKPN0Er2JCDo1yc1ZD4hiwlWqBv2bCPZQnrQaxLPqAIKRZOVbjtMOfS4BzZbO-2BcUPfYZcYNnNBtLFS1EjDRWwFxywdkDH-2F3PiBa7x1wKN7Ebw9Ga3zBG0xDy5semPk9JldaPahT-2BKFXskwCQzsYV44DHHuawchTpSpQ2ukr4wZYdL0-2Bttd8E-3D>?<br><h3><u>#multiple_streams</u></h3><br><strong>@fra.costa: </strong>@g.kishore I have a question around the input connector for Realtime tables.

Kafka has a contract of `at least once` how does Pinot preserves reporting integrity in case Kafka outputs the same element twice into the datastore?
Thanks in advance<br><strong>@g.kishore: </strong>Kafka does not output into Pinot <br><strong>@g.kishore: </strong>Pinot pulls from Kafka and we ensure that every event is consumed only once<br><strong>@g.kishore: </strong>@npawar talk at Kafka Summit will talk about this in detail <br><strong>@npawar: </strong>@npawar has joined the channel<br><strong>@fra.costa: </strong>I understand, great to hear, so we have one less thing to worry about :slightly_smiling_face:<br><strong>@g.kishore: </strong>yes. we ensure consistency across replicas as well.<br>