Skip to main content

Running OPAL-server with Apache Pulsar

Introduction

OPAL-server supports multiple backbone pub/sub solutions for connecting distributed server instances. This guide explains how to set up and use Apache Pulsar as the backbone pub/sub (broadcast channel) for OPAL-server.

Apache Pulsar as the Backbone Pub/Sub

What is a backbone pub/sub?

OPAL-server can scale out both in number of worker processes per server and across multiple servers. While OPAL provides a lightweight websocket pub/sub for OPAL-clients, multiple servers are linked together by a more robust messaging solution like Apache Pulsar, Kafka, Redis, or Postgres Listen/Notify.

Broadcaster Module

Support for multiple backbone solutions is provided by the Permit's port of the Python Broadcaster package. To use it with Apache Pulsar, install the permit-broadcaster[pulsar] module:

pip install permit-broadcaster[pulsar]

Setting Up OPAL-server with Apache Pulsar

Configuration

To use Apache Pulsar as the backbone, set the OPAL_BROADCAST_URI environment variable:

OPAL_BROADCAST_URI=pulsar://pulsar-host-name:6650

The "pulsar://" prefix tells OPAL-server to use Apache Pulsar.

Pulsar Topic

OPAL-server uses a single Pulsar topic named 'broadcast' for all communication. This topic is automatically created when the producer and consumer are initialized.

Docker Compose Example

Here's an example docker-compose.yml configuration that includes Apache Pulsar:

version: '3'
services:
pulsar:
image: apachepulsar/pulsar:3.3.1
command: bin/pulsar standalone
ports:
- 6650:6650
- 8080:8080
volumes:
- pulsardata:/pulsar/data
- pulsarconf:/pulsar/conf

opal-server:
image: permitio/opal-server:latest
environment:
- OPAL_BROADCAST_URI=pulsar://pulsar:6650
depends_on:
- pulsar

volumes:
pulsardata:
pulsarconf:

Run this configuration with:

docker compose up --force-recreate

Allow a few seconds for Apache Pulsar and OPAL to start up before testing connectivity.

Triggering Events

You can trigger events using the OPAL CLI:

opal-client publish-data-update --src-url https://api.country.is/23.54.6.78 -t policy_data --dst-path /users/bob/location

You should see the effect in:

  • OPAL-server logs: "Broadcasting incoming event"
  • OPAL-client: Receiving and acting on the event
  • Pulsar: Event data in the 'broadcast' topic

Supported Backends

BackendEnvironment VariableDocker Compose Service
KafkaBROADCAST_URL=kafka://localhost:9092docker compose up kafka
RedisBROADCAST_URL=redis://localhost:6379docker compose up redis
PostgresBROADCAST_URL=postgres://localhost:5432/broadcasterdocker compose up postgres
PulsarBROADCAST_URL=pulsar://localhost:6650docker compose up pulsar

Advanced: Publishing Events Directly to Pulsar

You can trigger events by publishing messages directly to the 'broadcast' topic in Pulsar. Ensure the message format follows the OPAL-server schema for backbone events.

Conclusion

This guide covered setting up and using Apache Pulsar as the backbone pub/sub for OPAL-server. By following these instructions, you can effectively scale your OPAL deployment across multiple servers.

Further Resources

For more information or support, please refer to the OPAL community forums or contact the maintainers.