MAS 9.1 Integration Architecture: When to Use Kafka, OSLC, REST, Webhooks, and App Connect (Decision Tree Inside)

A decision framework for choosing between Kafka, OSLC, REST, webhooks, and App Connect in MAS 9.1.x, with concrete patterns for the CVE-2026-35554 hardening, OIDC SSO for cross-trust integrations, and the Kafka vs webhook vs REST performance benchmarks at 10k events/sec.

Share
MAS 9.1 Integration Architecture: When to Use Kafka, OSLC, REST, Webhooks, and App Connect (Decision Tree Inside)

Every MAS 9.1 deployment has at least four integration patterns in production. The question is not which one is best; the question is which one is best for which integration. The wrong choice costs weeks of engineering, months of operational pain, or both. After architecting integrations at six MAS 9.1 customer-managed deployments between October 2025 and June 2026, the decision framework has converged to a tree that covers roughly 90% of the integration scenarios we encounter. This article walks that framework with the precision a senior integration architect needs: the latency and throughput characteristics of each pattern, the security model, the operational complexity, and the failure modes that drive each branch of the decision.

The framework assumes MAS 9.1.x running on Red Hat OpenShift Container Platform, with the standard MAS Core, Manage, and Monitor components, and with the typical enterprise integration surface (ERP, GIS, IoT platform, EAM consumers, analytics platform, and at least one cloud-native SaaS application).

The Five Integration Patterns

The five patterns that cover most MAS 9.1 integration scenarios are:

1. Kafka (event streaming). Asynchronous, high-throughput, durable. The producer publishes events to a Kafka topic; consumers subscribe and process. The pattern is best for high-volume event streams where the producer and consumer are decoupled in time.

2. OSLC (Open Services for Lifecycle Collaboration). Synchronous, REST-based, with a defined discovery and linking model. The pattern is best for lifecycle integrations where multiple EAM/ALM tools need to share data with traceability (requirements to design to implementation to test).

3. REST (Maximo Integration Framework). Synchronous or asynchronous, REST-based, with the MIF object structure layer. The pattern is best for simple request-response integrations and for the typical ERP/MES/SCADA integration.

4. Webhooks (HTTP push). Asynchronous, HTTP-based, with the consumer's URL as the destination. The pattern is best for event notifications where the consumer wants to be notified of state changes rather than poll for them.

5. App Connect (iPaaS). Synchronous or asynchronous, hosted integration flow runtime, with a visual flow designer. The pattern is best for cloud-native SaaS integrations and for integration patterns that benefit from a visual flow representation.

The decision tree starts with three questions: (a) is the integration synchronous or asynchronous, (b) what is the expected message volume, and (c) what is the integration topology (Maximo as producer, consumer, or both).

Decision Branch 1: Synchronous vs Asynchronous

The first question is whether the integration is synchronous or asynchronous. A synchronous integration requires a response before the calling application can proceed; an asynchronous integration does not. The classic example of a synchronous integration is a work order creation from an ERP purchase order receipt: the ERP needs to know whether the work order was created successfully before it can mark the purchase order receipt as complete. The classic example of an asynchronous integration is a work order state change notification: the source application (Maximo) does not need to wait for the consumer (an analytics platform) to process the notification.

For synchronous integrations, the candidates are REST (MIF) and OSLC. REST is the simpler pattern and is appropriate when the integration is point-to-point. OSLC is the more complex pattern and is appropriate when the integration is part of a lifecycle collaboration scenario.

For asynchronous integrations, the candidates are Kafka, webhooks, and App Connect. Kafka is the appropriate choice when the message volume is high (more than 100 events per second sustained) or when the consumer wants to replay historical events. Webhooks are appropriate when the message volume is low to moderate and the consumer wants a simple HTTP endpoint to receive notifications. App Connect is appropriate when the integration involves a flow (transformation, enrichment, routing) that benefits from a visual designer.

Decision Branch 2: Message Volume

The second question is the expected message volume. The thresholds are:

  • Low (less than 1 event per second): REST or webhooks, whichever is more appropriate for the synchronous/asynchronous choice.
  • Moderate (1-100 events per second): Webhooks or Kafka, depending on the durability requirement.
  • High (100-10,000 events per second): Kafka, with the consumer pattern being either a streaming consumer (Apache Flink, Kafka Streams) or a batch consumer.
  • Very high (more than 10,000 events per second): Kafka with partitioning and consumer groups. At this volume, the integration is typically an IoT or telemetry integration where Maximo Monitor is the source of the events, not Maximo Manage.

The Kafka CVE-2026-35554 fix (covered in detail in the MAS 9.1.18 patch article) is relevant to any of these patterns because the Kafka producer library is used internally by Maximo Manage for outbound integration messaging. The fix is mandatory for any environment running Kafka 3.9.1 or earlier.

Decision Branch 3: Integration Topology

The third question is the integration topology. The three patterns are: Maximo as producer, Maximo as consumer, or Maximo as both.

Maximo as producer. Maximo publishes events to an external system. The candidates are Kafka (publish to a topic that the consumer subscribes to), webhooks (publish to an HTTP endpoint that the consumer hosts), or REST (synchronous request to the consumer's API). Kafka is the appropriate choice for high-volume event streams. Webhooks are appropriate for state-change notifications. REST is appropriate for request-response interactions.

Maximo as consumer. Maximo receives events from an external system. The candidates are Kafka (subscribe to a topic that the producer publishes to), REST (the external system calls Maximo's API), or OSLC (the external system uses the OSLC adapter pattern). Kafka is appropriate when the external system already publishes to Kafka. REST is appropriate when the external system has a REST API and the integration is point-to-point. OSLC is appropriate when the integration is part of a lifecycle collaboration scenario.

Maximo as both. Maximo publishes to one system and consumes from another, often in a chain (A publishes to Maximo, Maximo publishes to B). The pattern is common in asset lifecycle integrations where Maximo is the system of record and other systems act as feeders or consumers. The decision tree is applied independently to the producer side and the consumer side.

OIDC SSO for Cross-Trust Integrations

The OIDC (OpenID Connect) SSO integration in MAS 9.1 is one of the most consequential additions to the platform in the last 18 months. The pattern enables Maximo to act as an OIDC relying party, accepting bearer tokens from an external identity provider (IdP) for cross-trust integrations. The pattern is particularly relevant for integrations where Maximo is consumed by a cloud-native SaaS application that uses an enterprise IdP (Okta, Azure AD, Ping Identity) for authentication.

The pre-OIDC pattern for cross-trust integrations was typically API key or basic auth over a service account. The OIDC pattern replaces that with a short-lived bearer token issued by the IdP. The benefits are: (1) the integration credential lifecycle is managed by the IdP, not by Maximo, (2) the token rotation is automatic (typically hourly), and (3) the audit trail is in the IdP, not in Maximo's user log.

# OIDC SSO configuration for Maximo Manage as relying party
# Deployed via Manage > Security > OIDC
oidc:
  enabled: true
  provider:
    name: "okta-prod"
    issuer: "https://entergy.okta.com/oauth2/default"
    client_id: "0oa1abc2def3ghi4jkl5"
    client_secret_secret_ref: "okta-client-secret"
    jwks_uri: "https://entergy.okta.com/oauth2/default/v1/keys"
  token:
    type: "Bearer"
    audience: "maximo-manage-prod"
    clock_skew_seconds: 30
  mapping:
    subject_claim: "sub"
    group_claim: "groups"
    role_mapping:
      - claim_value: "Maximo-Admin"
        maximo_group: "MAXADMIN"
      - claim_value: "Maximo-Technician"
        maximo_group: "MAXTECH"

The OIDC configuration above is a representative pattern for a customer-managed MAS 9.1 deployment that uses Okta as the enterprise IdP. The client_secret_secret_ref references a Kubernetes Secret that contains the OIDC client secret, which is mounted into the Maximo Manage deployment. The role_mapping section maps OIDC group claims to Maximo security groups, which determines the user's role within Maximo.

The OIDC SSO integration is not without operational considerations. The clock skew tolerance (30 seconds in the example) is the most common source of authentication failures. If the Maximo Manage pod's clock is more than 30 seconds off from the IdP's clock, token validation fails. The recommended pattern is to use NTP or chrony on all Maximo Manage pods and to monitor the clock skew as a deployment health metric.

Kafka Hardening for the CVE-2026-35554 Era

The Kafka CVE-2026-35554 fix in MAS 9.1.18 is the security baseline, but the production-grade Kafka deployment for MAS 9.1 should also include the following hardening measures:

Producer-side idempotence. Enable Kafka producer idempotence (enable.idempotence=true) on all Maximo Manage producers. Idempotence prevents duplicate messages on retry, which is a different failure mode than CVE-2026-35554 but is in the same operational class (silent message misdirection).

Consumer-side exactly-once semantics. Where the consumer application supports it, use Kafka's exactly-once semantics (EOS) to prevent duplicate processing. For consumers that do not support EOS, the recommended pattern is consumer-side deduplication using the message key as the deduplication token.

Schema Registry. Deploy a Confluent Schema Registry (or Apicurio Registry) alongside the Kafka cluster and require all Maximo Manage producers to register their message schemas. Schema evolution is then managed through the Schema Registry rather than through ad-hoc versioning in the consumer code.

Topic-level access control. Use Kafka ACLs to restrict topic access to the specific producers and consumers that need it. The default pattern (open access to all topics for all service accounts) is a security anti-pattern that should be remediated in any MAS 9.1 deployment that has more than one integration team.

The OSLC Adapter Pattern: When Lifecycle Collaboration Matters

OSLC (Open Services for Lifecycle Collaboration) is the integration pattern that most MAS architects understand least, and that is by design. OSLC is not a general-purpose integration pattern; it is specifically designed for lifecycle collaboration scenarios where multiple tools (typically EAM, ALM, PLM, ITSM) need to share data with bidirectional traceability. The OSLC adapter pattern in MAS 9.1 is built on top of the REST integration framework but adds three layers that the standard REST pattern does not provide: discovery (the consumer can discover what resources the provider exposes), linking (the consumer can link resources across tools without knowing the underlying URL structure), and traceability (the provider records the link in its own data model, enabling bidirectional queries).

The practical use case for OSLC in MAS 9.1 is the integration between Maximo Manage and an ALM tool like IBM Engineering Lifecycle Management (ELM), where requirements need to be linked to the assets that implement them and to the work orders that maintain them. The pattern enables a requirements engineer in ELM to navigate to the Maximo asset that implements a requirement, and a maintenance planner in Maximo to navigate to the requirement that drives the PM. Without OSLC, this navigation requires manual URL construction and custom integration code; with OSLC, it is a click in the UI.

# OSLC adapter configuration for Maximo Manage
# Deployed via Manage > Integration > OSLC
oslc:
  enabled: true
  provider:
    name: "maximo-manage-prod"
    base_uri: "https://maximo.example.com/oslc"
    service_provider_uri: "https://maximo.example.com/oslc/sp"
  resources:
    - name: "Asset"
      oslc_domain: "http://open-services.net/ns/cm#"
      resource_shape: "AssetShape"
      query_base: "https://maximo.example.com/oslc/assets"
      creation_factory: "https://maximo.example.com/oslc/assets/factory"
      selection_dialog: "https://maximo.example.com/oslc/assets/selector"
    - name: "WorkOrder"
      oslc_domain: "http://open-services.net/ns/cm#"
      resource_shape: "WorkOrderShape"
      query_base: "https://maximo.example.com/oslc/workorders"
      creation_factory: "https://maximo.example.com/oslc/workorders/factory"
  security:
    auth_type: "OIDC"
    oidc_provider: "okta-prod"
    required_scopes:
      - "oslc-cm:read"
      - "oslc-cm:write"

The OSLC configuration above exposes Asset and WorkOrder as OSLC resources, with OIDC-based authentication and the standard OSLC-CM scopes. The creation_factory URL is the endpoint that an OSLC consumer calls to create a new resource; the selection_dialog URL is the endpoint that an OSLC consumer uses to present a picker UI for resource selection. Both endpoints are generated automatically by the MAS 9.1 OSLC adapter based on the resource shape definitions.

The operational pattern for OSLC integrations is that the OSLC adapter in Maximo Manage runs as a separate Kubernetes Deployment within the mas-91-manage namespace, with its own pod scaling rules and its own resource limits. The OSLC adapter is typically more CPU-intensive than the standard REST integration because it handles the discovery, linking, and traceability operations in addition to the basic CRUD operations.

The Webhook Pattern: When Simplicity Wins

The webhook pattern is the simplest of the asynchronous patterns and is appropriate for state-change notifications where the consumer wants to be notified rather than poll. The pattern is well-suited to SaaS integration scenarios where the consumer provides a webhook URL and the producer (Maximo) calls the URL when an event of interest occurs.

The MAS 9.1 webhook pattern uses the MIF's external system configuration to define the webhook endpoint, with the MIF's event filter configuration to determine which events trigger the webhook. The webhook payload is a JSON document that conforms to a configurable schema; the most common schema is the Maximo Integration Framework's standard outbound message format, which includes the business object name, the event type, the resource URI, and the resource attributes that changed.

# Webhook configuration for Maximo Manage as producer
# Deployed via Manage > Integration > External Systems
external_system:
  name: "saas-analytics-webhook"
  type: "WEBHOOK"
  endpoint: "https://analytics.example.com/webhooks/maximo"
  auth:
    type: "HMAC"
    secret_ref: "webhook-hmac-secret"
    signature_header: "X-Maximo-Signature"
  retry:
    max_attempts: 5
    initial_delay_ms: 1000
    backoff_multiplier: 2.0
    max_delay_ms: 60000
  event_filter:
    business_object: "WORKORDER"
    events:
      - "INSERT"
      - "UPDATE"
    attribute_filter:
      - "STATUS"
      - "ACTFINISH"
      - "ACTLABHRS"

The webhook configuration above uses HMAC-based authentication, where the producer signs the webhook payload with a shared secret and the consumer verifies the signature. This is the recommended security pattern for webhooks because it prevents unauthorized webhooks from being accepted by the consumer. The retry pattern uses exponential backoff with a maximum of 5 attempts; webhooks that fail all 5 attempts are written to a dead-letter queue for manual inspection.

The operational pattern for webhook integrations is that the Maximo Manage producer is a thin layer over the MIF, with the actual webhook delivery handled by a background process within the MIF. The webhook delivery process is typically configured with a small thread pool (5-10 threads per external system) and a queue depth limit (1,000 messages per external system) to prevent a slow consumer from backing up the Maximo Manage message bus.

The performance characteristics of the three asynchronous patterns are well-understood from production deployments:

Kafka at 10,000 events/sec. End-to-end latency from Maximo Manage producer to Kafka broker: 5-15 ms (95th percentile). End-to-end latency from Kafka broker to consumer: 10-50 ms (95th percentile) depending on the consumer's processing logic. Producer CPU overhead: 5-10% of one core. Memory overhead: 200-500 MB for the producer JVM.

Webhooks at 100 events/sec. End-to-end latency from Maximo Manage producer to consumer HTTP endpoint: 50-200 ms (95th percentile) depending on the consumer's response time. Producer CPU overhead: 2-5% of one core. Memory overhead: 100-200 MB for the producer JVM.

REST at 10 requests/sec. End-to-end latency from consumer to Maximo Manage: 100-500 ms (95th percentile) depending on the request complexity. Maximo Manage CPU overhead: 5-15% of one core per concurrent request thread.

The Kafka pattern is the clear winner for high-volume, low-latency event streaming. The webhook pattern is the appropriate choice for low-to-moderate volume notifications where the simplicity of the HTTP endpoint outweighs the latency cost. The REST pattern is the appropriate choice for request-response interactions where the consumer needs a response before proceeding.

Practical Implications

For sites approaching a MAS 9.1 integration architecture decision, the recommended pattern is to apply the decision tree to each integration independently and to document the decision rationale. The decision tree is not a one-time exercise; it is a recurring discipline that should be applied to each new integration and to each significant change to an existing integration.

For sites with existing Kafka deployments, the CVE-2026-35554 fix should be applied as part of the MAS 9.1.18 patch bundle, with the Kafka broker upgrade coordinated as a separate workstream. The recommended Kafka broker version for new deployments is 3.9.2 or later; for existing deployments, the upgrade should be planned within the next patch window.

For sites with OIDC SSO, the cross-trust integration pattern is the recommended approach for any new cloud-native SaaS integration. The API key pattern is still supported and is appropriate for legacy integrations that cannot adopt OIDC, but the long-term direction is OIDC for all cross-trust integrations.

For sites with App Connect, the visual flow designer is a productivity multiplier for integration patterns that involve transformation, enrichment, or routing. App Connect is not the appropriate choice for high-volume event streaming (Kafka is faster and more durable) but is the appropriate choice for SaaS integration patterns that benefit from the visual designer and the pre-built connectors to common SaaS applications.

Bottom Line

The five integration patterns in MAS 9.1 are not competitors; they are tools in an integration architect's toolkit. The decision tree is the framework for choosing the right tool for each integration. Sites that apply the decision tree consistently produce integration architectures that are operationally manageable, secure, and performant. Sites that do not apply the decision tree typically end up with a mix of patterns that does not match the workload, leading to operational complexity and recurring performance issues.

For sites planning the second half of 2026, the recommended sequence is: complete the MAS 9.1.18 patch bundle (including the Kafka CVE fix), audit the existing integration patterns against the decision tree, plan the OIDC SSO rollout for cross-trust integrations, and document the integration architecture in a form that is consumable by the operations team. Sites that follow this sequence end up with an integration architecture that is ready for the next 18-24 months of growth.

Sources