SAP Community Groups enable professionals across the globe to come together to share, learn and grow.<\/p>", "imageupload.max_uploaded_images_per_upload" : 100, "imageupload.max_uploaded_images_per_user" : 1000, "integratedprofile.connect_mode" : "", "tkb.toc_maximum_heading_level" : "", "tkb.toc_heading_list_style" : "disc", "sharedprofile.show_hovercard_score" : true, "config.search_before_post_scope" : "community", "tkb.toc_heading_indent" : "", "p13n.cta.recommendations_feed_dismissal_timestamp" : -1, "imageupload.max_file_size" : 9216, "layout.show_batch_checkboxes" : false, "integratedprofile.cta_connect_slim_dismissal_timestamp" : -1 }, "isAnonymous" : true, "policies" : { "image-upload.process-and-remove-exif-metadata" : false }, "registered" : false, "emailRef" : "", "id" : -1, "login" : "Former Member" }, "Server" : { "communityPrefix" : "/khhcw49343", "nodeChangeTimeStamp" : 1732545228552, "tapestryPrefix" : "/t5", "deviceMode" : "DESKTOP", "responsiveDeviceMode" : "DESKTOP", "membershipChangeTimeStamp" : "0", "version" : "24.9", "branch" : "24.9-release", "showTextKeys" : false }, "Config" : { "phase" : "prod", "integratedprofile.cta.reprompt.delay" : 30, "profileplus.tracking" : { "profileplus.tracking.enable" : false, "profileplus.tracking.click.enable" : false, "profileplus.tracking.impression.enable" : false }, "app.revision" : "2411131220-sa98e51d235-b146", "navigation.manager.community.structure.limit" : "1000" }, "Activity" : { "Results" : [ ] }, "NodeContainer" : { "viewHref" : "https://community.sap.com/t5/application-development/gh-p/application-development", "description" : "Join the Application Development group to engage with the community on everything from development methodologies and programming tools to career development.", "id" : "application-development", "shortTitle" : "Application Development", "title" : "Application Development", "nodeType" : "grouphub" }, "Page" : { "skins" : [ "sap2023", "theme_hermes", "responsive_peak" ], "authUrls" : { "loginUrl" : "/plugins/common/feature/oidcss/sso_login_redirect/providerid/sap_ids_baseline_conditional_prod?referer=https%3A%2F%2Fcommunity.sap.com%2Ft5%2Fapplication-development-blog-posts%2Fcloudevents-at-sap%2Fba-p%2F13620137", "loginUrlNotRegistered" : "/plugins/common/feature/oidcss/sso_login_redirect/providerid/sap_ids_baseline_conditional_prod?redirectreason=notregistered&referer=https%3A%2F%2Fcommunity.sap.com%2Ft5%2Fapplication-development-blog-posts%2Fcloudevents-at-sap%2Fba-p%2F13620137", "loginUrlNotRegisteredDestTpl" : "/plugins/common/feature/oidcss/sso_login_redirect/providerid/sap_ids_baseline_conditional_prod?redirectreason=notregistered&referer=%7B%7BdestUrl%7D%7D" }, "name" : "BlogArticlePage", "rtl" : false, "object" : { "viewHref" : "/t5/application-development-blog-posts/cloudevents-at-sap/ba-p/13620137", "subject" : "CloudEvents at SAP 🌁", "id" : 13620137, "page" : "BlogArticlePage", "type" : "Thread" } }, "WebTracking" : { "Activities" : { }, "path" : "Community:SAP Community/Category:Groups/Category:Interest Groups/Category:Application Development/Blog:Blog Posts/Article:CloudEvents at SAP 🌁" }, "Feedback" : { "targeted" : { } }, "Seo" : { "markerEscaping" : { "pathElement" : { "prefix" : "@", "match" : "^[0-9][0-9]$" }, "enabled" : false } }, "TopLevelNode" : { "viewHref" : "https://community.sap.com/", "description" : "Official SAP Community. Search questions and answers, read the latest blog posts and curated content, connect with experts, and improve your SAP skills.", "id" : "khhcw49343", "shortTitle" : "SAP Community", "title" : "SAP Community", "nodeType" : "Community" }, "Community" : { "viewHref" : "https://community.sap.com/", "integratedprofile.lang_code" : "en", "integratedprofile.country_code" : "US", "id" : "khhcw49343", "shortTitle" : "SAP Community", "title" : "SAP Community" }, "CoreNode" : { "conversationStyle" : "blog", "viewHref" : "https://community.sap.com/t5/application-development-blog-posts/bg-p/application-developmentblog-board", "settings" : { }, "description" : "Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.", "id" : "application-developmentblog-board", "shortTitle" : "Blog Posts", "title" : "Application Development Blog Posts", "nodeType" : "Board", "ancestors" : [ { "viewHref" : "https://community.sap.com/t5/application-development/gh-p/application-development", "description" : "Join the Application Development group to engage with the community on everything from development methodologies and programming tools to career development.", "id" : "application-development", "shortTitle" : "Application Development", "title" : "Application Development", "nodeType" : "grouphub" }, { "viewHref" : "https://community.sap.com/t5/interest-groups/ct-p/interests", "description" : "From application development to enterprise architecture, Career Corner to Coffee Corner, Women in Tech to SAP Builders, find a group and join the discussion.", "id" : "interests", "shortTitle" : "Interest Groups", "title" : "Interest Groups", "nodeType" : "category" }, { "viewHref" : "https://community.sap.com/t5/groups/ct-p/groups", "description" : "Join local and global SAP Community groups to engage on focused topics, find events, explore career and learning opportunities, and chat in the Coffee Corner.", "id" : "groups", "shortTitle" : "Groups", "title" : "Groups", "nodeType" : "category" }, { "viewHref" : "https://community.sap.com/", "description" : "Official SAP Community. Search questions and answers, read the latest blog posts and curated content, connect with experts, and improve your SAP skills.", "id" : "khhcw49343", "shortTitle" : "SAP Community", "title" : "SAP Community", "nodeType" : "Community" } ] } }; LITHIUM.Components.RENDER_URL = "/t5/util/componentrenderpage/component-id/#{component-id}?render_behavior=raw"; LITHIUM.Components.ORIGINAL_PAGE_NAME = 'blogs/v2/BlogArticlePage'; LITHIUM.Components.ORIGINAL_PAGE_ID = 'BlogArticlePage'; LITHIUM.Components.ORIGINAL_PAGE_CONTEXT = 'O6wBr-e7lkrJkP5P67ggmiW0Rxaf5Pn-LhpoTKPGU12UEbXRHoGWMpxy_2hQBA8oNclfXZc6QGGTTgUrnNPBuXQIt000xuMhWwZXLbz-LDnHN8ocInCm461FSZSfFw3QOJIo590uLp1i_k7l9axhYCIOLzYKrb9_7yAfkQu6cw9jCBdP_ZuNJoYusPyfIG7D9hmLPvTR1amJ8__xq6QmCeIYksdqMTWg6Od5gg_2EKhHKROa94-FV13nRyfTmFaFAFOBaAQAlWyagVzdGqlWE2qyllNzVQp3afY_dKj-bOOVr_VZ0hXFEFh6o-Sbmb3BEn3D4XONXnJa7mOKA5A1q6RvQDmWR62oAxEDQaSGu0USCX7d-TxNQw1Q5J12N7qGJWlGqs5qWSeTFJpPym7KCA..'; LITHIUM.Css = { "BASE_DEFERRED_IMAGE" : "lia-deferred-image", "BASE_BUTTON" : "lia-button", "BASE_SPOILER_CONTAINER" : "lia-spoiler-container", "BASE_TABS_INACTIVE" : "lia-tabs-inactive", "BASE_TABS_ACTIVE" : "lia-tabs-active", "BASE_AJAX_REMOVE_HIGHLIGHT" : "lia-ajax-remove-highlight", "BASE_FEEDBACK_SCROLL_TO" : "lia-feedback-scroll-to", "BASE_FORM_FIELD_VALIDATING" : "lia-form-field-validating", "BASE_FORM_ERROR_TEXT" : "lia-form-error-text", "BASE_FEEDBACK_INLINE_ALERT" : "lia-panel-feedback-inline-alert", "BASE_BUTTON_OVERLAY" : "lia-button-overlay", "BASE_TABS_STANDARD" : "lia-tabs-standard", "BASE_AJAX_INDETERMINATE_LOADER_BAR" : "lia-ajax-indeterminate-loader-bar", "BASE_AJAX_SUCCESS_HIGHLIGHT" : "lia-ajax-success-highlight", "BASE_CONTENT" : "lia-content", "BASE_JS_HIDDEN" : "lia-js-hidden", "BASE_AJAX_LOADER_CONTENT_OVERLAY" : "lia-ajax-loader-content-overlay", "BASE_FORM_FIELD_SUCCESS" : "lia-form-field-success", "BASE_FORM_WARNING_TEXT" : "lia-form-warning-text", "BASE_FORM_FIELDSET_CONTENT_WRAPPER" : "lia-form-fieldset-content-wrapper", "BASE_AJAX_LOADER_OVERLAY_TYPE" : "lia-ajax-overlay-loader", "BASE_FORM_FIELD_ERROR" : "lia-form-field-error", "BASE_SPOILER_CONTENT" : "lia-spoiler-content", "BASE_FORM_SUBMITTING" : "lia-form-submitting", "BASE_EFFECT_HIGHLIGHT_START" : "lia-effect-highlight-start", "BASE_FORM_FIELD_ERROR_NO_FOCUS" : "lia-form-field-error-no-focus", "BASE_EFFECT_HIGHLIGHT_END" : "lia-effect-highlight-end", "BASE_SPOILER_LINK" : "lia-spoiler-link", "FACEBOOK_LOGOUT" : "lia-component-users-action-logout", "BASE_DISABLED" : "lia-link-disabled", "FACEBOOK_SWITCH_USER" : "lia-component-admin-action-switch-user", "BASE_FORM_FIELD_WARNING" : "lia-form-field-warning", "BASE_AJAX_LOADER_FEEDBACK" : "lia-ajax-loader-feedback", "BASE_AJAX_LOADER_OVERLAY" : "lia-ajax-loader-overlay", "BASE_LAZY_LOAD" : "lia-lazy-load" }; LITHIUM.noConflict = true; LITHIUM.useCheckOnline = false; LITHIUM.RenderedScripts = [ "Sandbox.js", "LiModernizr.js", "SearchForm.js", "jquery.ui.draggable.js", "InformationBox.js", "ActiveCast3.js", "jquery.effects.core.js", "jquery.ui.position.js", "SearchAutoCompleteToggle.js", "MessageBodyDisplay.js", "AjaxSupport.js", "jquery.position-toggle-1.0.js", "DeferredImages.js", "ProductTagList.js", "Events.js", "ForceLithiumJQuery.js", "NoConflict.js", "Link.js", "Globals.js", "jquery.ui.widget.js", "Text.js", "jquery.tools.tooltip-1.2.6.js", "PolyfillsAll.js", "PartialRenderProxy.js", "jquery.js", "jquery.lithium-selector-extensions.js", "jquery.blockui.js", "prism.js", "DropDownMenuVisibilityHandler.js", "HelpIcon.js", "jquery.delayToggle-1.0.js", "Auth.js", "EarlyEventCapture.js", "jquery.scrollTo.js", "AjaxFeedback.js", "ElementQueries.js", "SpoilerToggle.js", "jquery.appear-1.1.1.js", "json2.js", "Loader.js", "Cache.js", "jquery.function-utils-1.0.js", "jquery.hoverIntent-r6.js", "jquery.fileupload.js", "jquery.ui.core.js", "Video.js", "ElementMethods.js", "DropDownMenu.js", "jquery.css-data-1.0.js", "CustomEvent.js", "HrWrap.js", "AutoComplete.js", "jquery.json-2.6.0.js", "Tooltip.js", "jquery.iframe-shim-1.0.js", "jquery.ajax-cache-response-1.0.js", "jquery.ui.dialog.js", "jquery.placeholder-2.0.7.js", "Placeholder.js", "jquery.ui.resizable.js", "Lithium.js", "DataHandler.js", "Throttle.js", "DynamicPager.js", "Namespace.js", "jquery.iframe-transport.js", "Forms.js", "ResizeSensor.js", "jquery.viewport-1.0.js", "jquery.effects.slide.js", "jquery.tmpl-1.1.1.js", "jquery.clone-position-1.0.js", "jquery.autocomplete.js", "UserListActual.js", "jquery.ui.mouse.js", "Components.js" ];(function(){LITHIUM.AngularSupport=function(){function g(a,c){a=a||{};for(var b in c)"[object object]"===Object.prototype.toString.call(c[b])?a[b]=g(a[b],c[b]):a[b]=c[b];return a}var d,f,b={coreModule:"li.community",coreModuleDeps:[],noConflict:!0,bootstrapElementSelector:".lia-page .min-width .lia-content",bootstrapApp:!0,debugEnabled:!1,useCsp:!0,useNg2:!1},k=function(){var a;return function(b){a||(a=document.createElement("a"));a.href=b;return a.href}}();LITHIUM.Angular={};return{preventGlobals:LITHIUM.Globals.preventGlobals, restoreGlobals:LITHIUM.Globals.restoreGlobals,init:function(){var a=[],c=document.querySelector(b.bootstrapElementSelector);a.push(b.coreModule);b.customerModules&&0

Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
ajmaradiaga
Developer Advocate
Developer Advocate
8,701

TLDR; SAP is an active contributor to the CloudEvents specification and it has adopted the specification for describing event data in common formats to provide interoperability across its services/applications/systems. In the SAP Business Accelerator Hub, you can find all the events exposed by a total of 17 different SAP services that publish events following the specification, including its flagship ERP products, SAP S/4HANA Cloud public edition and SAP S/4HANA, exposing more than 600+ events combined. To enable seamless event-based integrations between SAP applications, SAP applications must conform to the CloudEvents specification. SAP also offers three services, part of the SAP Business Technology Platform (SAP BTP), that can help customers embrace event-driven architectures, these are: SAP Cloud Application Event HubSAP Event Mesh, and SAP Integration Suite, advanced event mesh.

 

CloudEvents-CloudEvents.png

 

Before we dive into how CloudEvents have been adopted within SAP, we might need to talk a bit about what an Event-Driven architecture is and what a CloudEvent is as well. Let's get started.

In October 2024, SAP published the SAP Event Driven Architecture Whitepaper, which is an informational document that describes and highlights the SAP technologies available to address event driven architecture needs. By getting familiar with the document, you can get a deeper understanding of how EDA enables your SAP applications. Check out the whitepaper: https://dam.sap.com/mac/app/p/pdf/asset/preview/LFK8XBY?ltr=a&rc=10&doi=SAP1130399.

Event-Driven Architectures

Long gone are the days when a system (aka target system) will constantly poll to check if there are any changes in another system, e.g. a new customer created in a master data system. Traditionally, the target system will only know this by programming a routine that will poll a file share and check for any files produced by this system or a web service exposed in the source system, every X minutes/hours/days. The expectation nowadays is that systems are integrated and that the data exchanged between these systems will be immediately available in the target system(s) if any data is created/changed in the source system. Enter Event-Driven architectures.

An Event-Driven Architecture is a software architecture paradigm concerning the production and consumption of events. An event can be defined as a significant change in the state of an object within a system[1]. For example, when a customer/supplier/employee (business object) is created/updated/deleted ( action) in a system. Translating this to the SAP world, when a Business Partner is created/changed in SAP S/4HANA (source system), SAP S/4HANA can notify that there was a change in a business object and target system(s) interested in the Business Partner object can then react and trigger follow-up activities in their systems.

How do source and target systems communicate?

Now, if the source system lets other systems know of any changes happening in its business objects, it will not be sustainable to create a new programming routine within the source system every time we want to notify a new target system of any changes. Traditionally we would have some form of middleware, e.g. SAP Cloud Integration, and configure our source system, an SAP S/4HANA system, to send notifications of these events to the middleware and then use the middleware to distribute these messages, e.g. we would add target system(s) as needed. Now, we are moving the problem from the source system to a sort of middleware but ideally, there will be a way for the source system to notify others without the need to make any changes. Enter the event broker.

An event broker is message-oriented middleware that enables the transmission of events between different components of a system, acting as a mediator between publishers and subscribers. It is the cornerstone of event-driven architecture, and all event-driven applications use some form of event broker to send and receive information[2].

By introducing an event broker in our landscapes, we can configure our source systems to publish their events to this message-oriented middleware. The source system will specify the class of the message (aka topic). Then, systems interested in the changes happening, e.g. in a particular business object in the source system, can subscribe to the event(s), via the event broker, by specifying the topic they are interested (topic-based filtering) in or it can also be based on the content of the message (content-based filtering). There are two keywords important here, publish and subscribe (PubSub), this is a well-known messaging pattern used to decouple systems/applications and allow asynchronous communication between them.

What is the PubSub messaging pattern?

Publish-subscribe is a communication pattern that is defined by the decoupling of applications, where applications publish messages to an intermediary broker rather than communicating directly with consumers (as in point-to-point)[3]. In a way, publishers and consumers do not need to know each other; they simply publish (produce) or consume (receive) the events. When following this messaging pattern we move from the traditional polling mechanism to know if there have been any changes in the source system to reacting to real-time events (notifications) the moment something happens in the source system.

CloudEvents-PubSub.drawio.png 

A subscriber (consumer), is generally only interested in a subset of the messages published. Normally, a message-oriented middleware will provide subscribers with a mechanism to set filters on the data that they want to receive. There are two common ways of filtering: topic-based and content-based[4].

Topic-based filtering

We mentioned before how target systems can subscribe to events by specifying a topic they are interested in.... some event brokers will allow subscribers to subscribe to topics by using wildcards (*) and they will be able to receive only the events they are interested in, which can be for different topics. For example, let's assume we have an SAP S/4HANA with the name S4D and it publishes the Business Partner create and change on the following topics: sap/S4HANAOD/S4D/ce/sap/s4/beh/businesspartner/v1/BusinessPartner/Created/v1 and sap/S4HANAOD/S4D/ce/sap/s4/beh/businesspartner/v1/BusinessPartner/Changed/v1. A subscriber system could subscribe to both topics using a wildcard, e.g. sap/S4HANAOD/S4D/ce/sap/s4/beh/businesspartner/v1/BusinessPartner/*/v1 and receive the messages for both event types. In this case, we are filtering the message by topics.

Content-based filtering

In some other cases, the event broker will allow the subscriber to specify which messages they want to receive, based on the attributes or content of the message. For example, the message sent to the event broker can contain attributes that describe the message and we can do some filtering based on the values of those attributes. Note: An example is shared later, on how attributes in a message (CloudEvent) can be used to define filters.

SAP offers different services that can act as event brokers. We will discuss this further in the SAP's event-driven portfolio section.

With many systems in our landscapes and each one being developed by different vendors/teams, it would be good if there was a standard way of structuring these events to simplify how systems create/handle/process these messages right? Enter CloudEvents.

What is CloudEvents?

CloudEvents-logo.png

Today's system landscapes are very complex and we need to deal with many systems communicating with each other, ideally as close to real-time as possible. Nowadays, a system can publish events to notify other systems of the changes happening within the objects of their system. Given that we are talking of many systems, ideally, there will be a common way of describing the data produced by these systems. The CloudEvents specification can help us with this. We can leverage it to provide a consistent way for how our systems can communicate with others about these events.

As mentioned on the CloudEvents website... CloudEvents is a specification for describing event data in a common way. It's goal is to simplify event declaration and delivery across services, platforms and beyond! The specification is now under the Cloud Native Computing Foundation.

Below is an example of what a CloudEvent message will look like:

{
  "specversion": "1.0",
  "type": "com.github.pull_request.opened",
  "source": "https://github.com/cloudevents/spec/pull",
  "subject": "123",
  "id": "A234-1234-1234",
  "time": "2018-04-05T17:31:00Z",
  "comexampleextension1": "value",
  "comexampleothervalue": 5,
  "datacontenttype": "text/xml",
  "data": "<much wow=\"xml\"/>"
}

You'll notice that the example above is composed of many attributes, the event context. The context describes the event and is independent of the event data. Meaning that we can somehow process/inspect the event without needing to process its data. Now, let's dive a bit into the message itself.

For more information on the history, development and design rationale behind the specification, see the CloudEvents Primer document.

CloudEvents message format

A CloudEvent message is mainly composed of context attributes and data.

Context Attributes

A number of attributes can be included within the message, these attributes are known as Context Attributes and the idea is that these context attributes can be used to describe the event. We can think of these context attributes as the header information of our event that can be used for filtering and routing. Let's explore some of the attributes available.

NameRequiredDescriptionExample
id✅Identifies the event. Producers MUST ensure that source + id is unique for each distinct event.63d6a150-c6a1-4c5b-bcc3-27d90c07941c
source✅Identifies the context in which an event happened./default/sap.s4.beh/244572008
specversion✅The version of the CloudEvents specification which the event uses.1.0
type✅Describes the type of the eventsap.s4.beh.businesspartner.v1.BusinessPartner.Changed.v1
datacontenttype Content type of the value in data.application/json

Extension Context Attributes

A CloudEvent message may also include additional context attributes, which are not defined as part of the specification. These additional attributes are known as "extension attributes" and can be used by the producer systems or intermediaries to include additional metadata to an event, similar to how we can use HTTP custom headers.

For example, in the SAP Digital Vehicle Hub Business Events package, we can see that the event raised when a vehicle changes - sap.dmo.dvh.Vehicle.Changed.v1, contains the extension context attribute sappassport, which is an SAP specific tracing identifier.

{
  "specversion": "1.0",
  "type": "sap.dmo.dvh.Vehicle.Changed.v1",
  "source": "/eu10/sap.dmo.dvh",
  "subject": "808E6E30B65149978A443429B29FB300",
  "id": "a823e884-5edc-4194-a81a-f3a3632417ee",
  "time": "2018-04-08 08:31:00",
  "datacontenttype": "application/json",
  "sappassport": "string",
  ....
}

Data

A CloudEvent message may include a payload but this is not required. If included it will be in the format specified in the datacontenttype context attribute. Although it is not required, we will generally have a payload in messages. Below we can see an example of an event message that contains a payload. In this case, a Business Partner changed event generated by an SAP S/4HANA Cloud Public Edition.

{
    "type": "sap.s4.beh.businesspartner.v1.BusinessPartner.Changed.v1",
    "specversion": "1.0",
    "source": "/default/sap.s4.beh/244572008",
    "id": "63d6a150-c6a1-4c5b-bcc3-27d90c07941c",
    "time": "2024-02-26T10:53:06Z",
    "datacontenttype": "application/json",
    "data": {
        "BusinessPartner": "1000667"
    }
}

Check out the Business Partner changed event in the SAP Business Accelerator Hub - https://hub.sap.com/event/CE_BUSINESSPARTNEREVENTS/resource.

SAP's adoption of CloudEvents

SAP is an active contributor to the CloudEvents specification and one of its many adopters. Evidence of that is the different products (event packages) that we can find documented in the SAP Business Accelerator Hub > Events category.

The products listed below document their events in the form of event packages in the SAP Business Accelerator Hub. All their events follow the CloudEvents specification:

  • SAP Agricultural Origination Portal
  • SAP Batch Release Hub for Life Sciences
  • SAP Cell and Gene Therapy Orchestration
  • SAP Cloud for Utilities Foundation
  • SAP Digital Vehicle Hub
  • SAP GRC Cloud - Issue Management and Remediation Service
  • SAP Industry Process Framework
  • SAP Intelligent Clinical Supply Management for Operations
  • SAP Intelligent Clinical Supply Management for Planning
  • SAP Landscape Management Cloud
  • SAP Marketing Cloud
  • SAP Order Management Foundation
  • SAP S/4HANA
  • SAP S/4HANA Cloud Public Edition
  • SAP S/4HANA Utilities for Customer Engagement
  • SAP S/4HANA for Procurement Planning Cloud
  • SAP Subscription Billing

SAP's flagship ERP products, SAP S/4HANA Cloud Public edition and SAP S/4HANA, expose more than 600+ events combined. As you might have noticed from the events that we use as examples above, these events follow the CloudEvents specification. Below we can see the BusinessPartner Created event generated by an SAP S/4HANA Cloud Public Edition and we can see how it follows the CloudEvents specification.

{
    "type": "sap.s4.beh.businesspartner.v1.BusinessPartner.Created.v1",
    "specversion": "1.0",
    "source": "/default/sap.s4.beh/244572008",
    "id": "194780e0-b5db-1ede-b58a-4550178dff9e",
    "time": "2024-02-26T09:50:00Z",
    "datacontenttype": "application/json",
    "data": {
        "BusinessPartner": "1000667"
    }
}

Kyma

kyma-runtime.png

Kyma contains an Eventing module, which provides functionality to publish and subscribe to CloudEvents. It follows the PubSub messaging pattern and all events in Kyma conform to the CloudEvents specification[5]. At the moment, NATS (provided by the NATS module) and SAP Event Mesh are supported as backends for eventing and it is recommended to use the CloudEvents specification for sending and receiving events. Even the legacy events are automatically converted to CloudEvents.

SAP's event-driven portfolio

CloudEvents-EDA Strategy.png

 SAP offers various services that can help customers embrace event-driven architectures. The different offerings can meet customers where they are in their EDA adoption/implementation journey. These are:

  • SAP Cloud Application Event Hub
  • SAP Event Mesh
  • SAP Integration Suite, advanced event mesh

SAP Cloud Application Event Hub

sap-event-broker.png

SAP Cloud Application Event Hub is the latest service released by SAP that focuses on event-driven architecture and it supports event-based integration between SAP cloud and BTP-based applications. It is a fully managed cloud service that allows SAP cloud applications to communicate asynchronously through events. Meaning it can be used to distribute events between SAP cloud applications. For example, this service can be leveraged to enable seamless integration between SAP S/4HANA Cloud public edition and SAP Subscription Billing. When an integration scenario leverages SAP Cloud Application Event Hub, it eliminates having to configure an event storage or infrastructure such as customer-defined topics or queues to enable the event-based integration between systems.

CloudEvents-SeamlessIntegration.pngIntegration between SAP S/4HANA Cloud and SAP Subscription Billing

CloudEvents are first-class citizens in SAP Cloud Application Event Hub, as events that are distributed between SAP cloud applications using SAP Cloud Application Event Hub all conform to the CloudEvent Specification[6]. Evidence of this is how we can filter SAP event subscriptions by defining filters based on the CloudEvent context attributes, e.g. by filter by type, subject, or extension context attributeNote: This is an example of content-based filtering taking place in the message-oriented middleware.

If all your event needs are within the SAP cloud world, e.g. exchange events between SAP cloud applications and SAP BTP, this service can fulfill your needs.

SAP Event Mesh 

event-mesh.png

SAP Event Mesh allows applications to communicate through asynchronous events. It can be used to publish and consume business events from SAP and non-SAP sources across hybrid landscapes from the digital core (ERP products, e.g. SAP S/4HANA Cloud public edition and SAP S/4HANA) to extension applications through event-driven architecture. It is a fully managed centralised event-oriented service part of SAP BTP.

event-mesh-diagram.png

The service supports the use of REST APIs for Events, for publishing and consuming events that are compliant with the CloudEvents specification. Related to event-based integrations, events that flow through SAP Event Mesh between SAP applications must all conform to the CloudEvents specification.

You can check out how to enable the consumption of SAP S/4HANA Cloud public edition events in your SAP BTP account - https://youtu.be/4LspIL3NxqQ

SAP Integration Suite, advanced event mesh (AEM)

advanced-event-mesh.png

SAP Integration Suite, advanced event mesh (AEM) is a complete event streaming, event management, and monitoring platform that incorporates best practices, expertise, and technology for event-driven architecture (EDA) on a single platform. With AEM you can deploy event broker services, create event meshes, and optimise and monitor your event-driven system.

AEM offers these categories of services:

  • Event Streaming: It provides event streaming services and gives you access to event broker services that provide advanced features like the publish-subscribe messaging pattern, queuing, streaming, replay, and request-reply, while doing all the heavy lifting to dynamically deploy, upgrade, patch, and operate the service. It extends beyond the cloud and supports infrastructure and EDAs across hybrid cloud solutions and your on-premises deployments.

    Event brokers can be deployed to: public clouds administered by SAP (Public Regions or Dedicated Regions) and customer's own regions in the cloud or on-premises (Customer-Controlled Regions)

  • Event Management: It provides event management services. The Event Portal provides powerful tools to create, design, share, and manage various aspects of your EDA based on event brokers or other streaming technologies. It fully supports the AsyncAPI 2.0.0 specification so that you can generate code, documentation, validate events, and apply API management policies for applications in your EDA.

    You might have noticed that some event specification in the SAP Business Accelerator Hub are documented using the AsyncAPI specification, e.g. Marketing Campaign Events part of SAP Marketing Cloud.

  • Event Monitoring and Insights: Availability out-of-the-box of dashboards and easy-to-understand visualizations based on historical and real-time metrics, and timely notifications about the event broker services deployed.

Similar to SAP Event Mesh, it can be used to publish and consume business events from SAP and non-SAP sources across hybrid landscapes. Meaning, if your event data needs to exit the SAP cloud world, you can use any of these two services.


Thanks for making it this far, we've covered a lot in this blog post and I hope it gives you a general understanding of CloudEvents, its importance in the SAP world, how it can enable integration across SAP applications and the different SAP offerings that can enable your EDA journey.

 
Special thanks to Klaus Deissner (@klaus_deissner) for reviewing and contributing to this blog post.

  1. Event-Driven architecture: link â†©ï¸

  2. What is an event broker?: link â†©ï¸ 

  3. What is the publish-subscribe messaging pattern?: link â†©ï¸

  4. Publish-subscribe pattern - Message filtering: link â†©ï¸

  5. Eventing module in Kyma: link â†©ï¸

  6. SAP Event-Driven integrations: link â†©ï¸


Originally published at ajmaradiaga.com.

 

 

12 Comments
Labels in this area