There are multiple ways to go about this. But in general you’d be using Zanzibar as a datastore, and as you say use a data-fetcher to load data or subsets of data from into OPA.
At Permit we combine that with a Go plugin for OPA that optimizes the navigation on the graph subset downloaded from the Zanzibar system.
Note that non critical path queries like reverse indices (Who can do x, as opposed to can Y do x) could/should still be executed against the top full Zanzibar solution