{"id":891,"date":"2022-10-03T13:06:33","date_gmt":"2022-10-03T03:06:33","guid":{"rendered":"https:\/\/www.infrasoft.com.au\/?p=891"},"modified":"2024-03-28T13:30:39","modified_gmt":"2024-03-28T03:30:39","slug":"ulinga-for-kafka-support-for-custom-code-via-user-exits","status":"publish","type":"post","link":"https:\/\/www.infrasoft.com.au\/?p=891","title":{"rendered":"uLinga for Kafka &#8211; Support for Custom Code via User Exits"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"891\" class=\"elementor elementor-891\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e1b594f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e1b594f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2072def\" data-id=\"2072def\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-108b126 elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"108b126\" data-element_type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-1024x576.jpg\" class=\"attachment-large size-large wp-image-756\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-1024x576.jpg 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-300x169.jpg 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-768x432.jpg 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-1536x864.jpg 1536w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/09\/uLinga-for-Kafka-Article-Title-Graphic-01-2048x1152.jpg 2048w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6df9802 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6df9802\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-03032be\" data-id=\"03032be\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ed1ba3e elementor-widget elementor-widget-text-editor\" data-id=\"ed1ba3e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3>Introduction<\/h3><p>HPE NonStop users are becoming more familiar with Kafka, as Kafka in turn becomes more and more prevalent inside large enterprise environments.\u00a0 Kafka is now used by thousands of companies, including 60% of the Fortune 100, and many NonStop shops.\u00a0 Well known users in the finance space include Goldman Sachs, Rabobank, Barclays, Jack Henry and PayPal, and household names that use Kafka include Netflix, Oracle, LinkedIn and AirBnB.\u00a0 A full list of Kafka users is available <a href=\"https:\/\/kafka.apache.org\/powered-by#:~:text=Today%2C%20Kafka%20is%20used%20by,strategies%20with%20event%20streaming%20architecture.\">here.<\/a><\/p><p>These organizations use Kafka to manage \u201cstreams\u201d of data, which have become prevalent as internet usage massively boosts the amount of data being generated and needing to be processed.\u00a0Kafka allows these huge volumes of data to be processed in real-time, via a combination of \u201cproducers\u201d and \u201cconsumers\u201d, which work with a Kafka \u201ccluster\u201d \u2013 the main data repository.<\/p><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">NonStop Servers have valuable data on them that users may want to stream to Kafka, and NonStop applications may also have a need to send their data directly to Kafka.\u00a0 In these situations, NonStop users need a reliable, high-performing way to get that data streamed to Kafka.\u00a0 This is where uLinga for Kafka comes in.<\/span><\/p><div><h3><span style=\"color: inherit; font-family: inherit; font-size: 1.75rem;\">uLinga for Kafka &#8211; Overview<\/span><\/h3><\/div><p><a>uLinga for Kafka is the latest addition to Infrasoft\u2019s uLinga product range, a solution suite that has been used by large banks, telcos and manufacturers to provide reliable mission-critical communications infrastructure for many years.\u00a0 uLinga for Kafka brings the same performance, scalability, security and manageability to the Kafka space as users have successfully utilized with the other uLinga products.<\/a><\/p><p>uLinga for Kafka takes a unique approach to Kafka integration: it runs as a natively compiled Guardian process pair, and supports the Kafka communications protocols directly over TCP\/IP.\u00a0 This removes the need for Java libraries or intermediate databases, providing the best possible performance on HPE NonStop.\u00a0 It also allows uLinga for Kafka to directly communicate with the Kafka cluster, getting streamed data across as quickly and reliably as possible.<\/p><p><span style=\"color: inherit; font-family: inherit; background-color: #ffffff;\">With the latest release of uLinga for Kafka now available, a number of new key features have been implemented. The product has once again been benchmarked and proven to perform at massive volumes \u2013 over 25,000 TPS running on a single core of a NonStop X3 processor. This article provides a refresher on uLinga for Kafka and summarises those new features and performance figures.<\/span><\/p><h3>uLinga for Kafka &#8211; Application Integration<\/h3><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">uLinga for Kafka (uLinga) supports a range of options to communicate with HPE NonStop applications and read\/process NonStop data.<\/span><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">\u00a0 <\/span><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">Applications can use standard Guardian IPC messages, or Pathsend requests, to send data to uLinga, and HTTP clients can send data via uLinga\u2019s inbuilt HTTP interface.<\/span><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">\u00a0 <\/span><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">uLinga can process disk records directly from Enscribe files, and as of the most recent product release, also supports TMF Audit Trails, meaning updates to all TMF-protected files can be streamed by uLinga to Kafka.<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b018868 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b018868\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8c03b3a\" data-id=\"8c03b3a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fd486b8 elementor-widget elementor-widget-image\" data-id=\"fd486b8\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"360\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png\" class=\"attachment-large size-large wp-image-825\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-300x135.png 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-768x346.png 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams.png 1103w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 1. uLinga for Kafka Accessing TMF Audit Trail Data<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-af5f745 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"af5f745\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4ae1c0d\" data-id=\"4ae1c0d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c2c1864 elementor-widget elementor-widget-text-editor\" data-id=\"c2c1864\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h3><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 16px;\">User Exit Support<\/span><\/h3><p style=\"margin-right: 0px; margin-bottom: 1.25rem; margin-left: 0px; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-stretch: inherit; line-height: inherit; font-family: Hind, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; vertical-align: baseline; color: #020202; background-color: #ffffff;\"><span style=\"font-weight: var( --e-global-typography-text-font-weight ); color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; background-color: #f9f9f9;\">The most recent release of uLinga for Kafka includes support for customer-written user exit processing.<\/span><span style=\"font-weight: var( --e-global-typography-text-font-weight ); color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; background-color: #f9f9f9;\">\u00a0 <\/span><span style=\"font-weight: var( --e-global-typography-text-font-weight ); color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; background-color: #f9f9f9;\">Custom user exit code can manipulate\/transform data before it is sent to Kafka, or can conditionally determine whether a particular record should be sent to Kafka or omitted.<\/span><span style=\"font-weight: var( --e-global-typography-text-font-weight ); color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; background-color: #f9f9f9;\">\u00a0 <\/span><span style=\"font-weight: var( --e-global-typography-text-font-weight ); color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; background-color: #f9f9f9;\">The functionality implemented by the custom code is entirely up to the customer \u2013 virtually anything is possible.<\/span><\/p><p>\u00a0<\/p><p>Custom user exit functionality can be invoked from a number of configuration points within uLinga.\u00a0 Consider the following implementation, where uLinga is reading\/streaming data from an Enscribe file using its FILEREADER capability:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-77ed71f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"77ed71f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ce4a7ef\" data-id=\"ce4a7ef\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c8bbc6e elementor-widget elementor-widget-image\" data-id=\"c8bbc6e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-2-1024x576.png\" class=\"attachment-large size-large wp-image-901\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-2-1024x576.png 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-2-300x169.png 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-2-768x432.png 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-2.png 1280w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 2. NonStop Application Sending Data to uLinga over $RECEIVE<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-eb234c0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"eb234c0\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2f1d5a6\" data-id=\"2f1d5a6\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-af6c64d elementor-widget elementor-widget-text-editor\" data-id=\"af6c64d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"MsoNormal\">In this configuration, a uLinga USEREXIT could be invoked from the IPCSERVER, from the KAFKAPRODUCER, or both.\u00a0 This gives significant flexibility in terms of where customer-written code is executed.\u00a0<\/p><p class=\"MsoNormal\">\u00a0<\/p><p class=\"MsoNormal\">If uLinga was configured to monitor two different sets of Enscribe files, it would have two different FILEREADER resources.\u00a0 In this case you could configure a different USEREXIT for each FILEREADER, providing different functionality for each file being processed.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-924d142 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"924d142\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-940aa75\" data-id=\"940aa75\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9ed4db3 elementor-widget elementor-widget-image\" data-id=\"9ed4db3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-3-1024x576.png\" class=\"attachment-large size-large wp-image-902\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-3-1024x576.png 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-3-300x169.png 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-3-768x432.png 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-3.png 1280w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 3. Different Custom Code for Different Enscribe Files<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8fed491 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8fed491\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fc56b6b\" data-id=\"fc56b6b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9217dfc elementor-widget elementor-widget-text-editor\" data-id=\"9217dfc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>If you wanted all data being streamed to a single topic to have the same custom code logic applied, you could configure a USEREXIT at the KAFKAPRODUCER.\u00a0 This would ensure that all data, regardless of the origin, would have the same custom code invoked.<\/p><div>\u00a0<\/div>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0c8ad6c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0c8ad6c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-23af5f7\" data-id=\"23af5f7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b0d1ad3 elementor-widget elementor-widget-image\" data-id=\"b0d1ad3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-4-1024x576.png\" class=\"attachment-large size-large wp-image-903\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-4-1024x576.png 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-4-300x169.png 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-4-768x432.png 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-4.png 1280w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 4. Common Code for Single Kafka Topic<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b516349 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b516349\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-43a9c52\" data-id=\"43a9c52\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6349d52 elementor-widget elementor-widget-text-editor\" data-id=\"6349d52\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">Customer-written user exit code can be managed by uLinga for Kafka, using uLinga\u2019s Worker Farm framework.\u00a0 <\/span><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-weight: var( --e-global-typography-text-font-weight );\">Customer-written code can also be run as a Pathway server class, and can even be run on a remote HTTP server, accessed by uLinga\u2019s built-in HTTP support.<\/span><\/p><p>\u00a0<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c27b22a elementor-widget elementor-widget-image\" data-id=\"c27b22a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-5-1024x576.png\" class=\"attachment-large size-large wp-image-904\" alt=\"\" srcset=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-5-1024x576.png 1024w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-5-300x169.png 300w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-5-768x432.png 768w, https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/10\/2022-09-14-Connection-Article-Kafka-Diagrams-Fig-5.png 1280w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Figure 5. Custom User Exit Code running on an Off-board Web Server<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f6aa66a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f6aa66a\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a61e9e3\" data-id=\"a61e9e3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1ca8cf1 elementor-widget elementor-widget-text-editor\" data-id=\"1ca8cf1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"MsoNormal\"><b>High Performance<\/b><o:p><\/o:p><\/p><p class=\"MsoNormal\">Because uLinga for Kafka is written in C, and does not\nrequire any additional libraries or interim servers, it is able to achieve\nimpressive performance figures, with extremely low latency.<o:p><\/o:p><\/p><p class=\"MsoNormal\">Infrasoft testing has shown that the product is able to\nexceed 25,000 TPS with sub-millisecond latency, running in a single core of a\nNonStop X3 processor.&nbsp; Perhaps more\nimportantly given most NonStops are used in OLTP environments, when running at\na steady state of 1000TPS, uLinga for Kafka has a very low CPU\nrequirement.&nbsp; This will allow uLinga for\nKafka to process data from the busiest of NonStop OLTP applications with\nminimal overhead.<o:p><\/o:p><\/p><p>\n\n\n\n\n\n<\/p><p class=\"MsoNormal\">uLinga for Kafka is now available.&nbsp; Please contact <a href=\"mailto:productinfo@infrasoft.com.au\">productinfo@infrasoft.com.au<\/a> for\nmore information or to arrange a trial.&nbsp;&nbsp;<o:p><\/o:p><\/p>\n<p><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Introduction HPE NonStop users are becoming more familiar with Kafka, as Kafka in turn becomes more and more prevalent inside large enterprise environments.\u00a0 Kafka is now used by thousands of companies, including 60% of the Fortune 100, and many NonStop shops.\u00a0 Well known users in the finance space include Goldman Sachs, Rabobank, Barclays, Jack Henry [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-891","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.infrasoft.com.au\/?p=891\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft\" \/>\n<meta property=\"og:description\" content=\"Introduction HPE NonStop users are becoming more familiar with Kafka, as Kafka in turn becomes more and more prevalent inside large enterprise environments.\u00a0 Kafka is now used by thousands of companies, including 60% of the Fortune 100, and many NonStop shops.\u00a0 Well known users in the finance space include Goldman Sachs, Rabobank, Barclays, Jack Henry [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.infrasoft.com.au\/?p=891\" \/>\n<meta property=\"og:site_name\" content=\"Infrasoft\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.linkedin.com\/company\/infrasoft-pty-limited\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-03T03:06:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-28T03:30:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png\" \/>\n<meta name=\"author\" content=\"website\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"website\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891\"},\"author\":{\"name\":\"website\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/ab1cfc963931c33ab30cec69b057ad56\"},\"headline\":\"uLinga for Kafka &#8211; Support for Custom Code via User Exits\",\"datePublished\":\"2022-10-03T03:06:33+00:00\",\"dateModified\":\"2024-03-28T03:30:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891\"},\"wordCount\":912,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"en-AU\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.infrasoft.com.au\/?p=891#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891\",\"url\":\"https:\/\/www.infrasoft.com.au\/?p=891\",\"name\":\"uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft\",\"isPartOf\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png\",\"datePublished\":\"2022-10-03T03:06:33+00:00\",\"dateModified\":\"2024-03-28T03:30:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#breadcrumb\"},\"inLanguage\":\"en-AU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.infrasoft.com.au\/?p=891\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-AU\",\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage\",\"url\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams.png\",\"contentUrl\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams.png\",\"width\":1103,\"height\":497},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.infrasoft.com.au\/?p=891#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infrasoft.com.au\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uLinga for Kafka &#8211; Support for Custom Code via User Exits\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#website\",\"url\":\"https:\/\/www.infrasoft.com.au\/\",\"name\":\"Infrasoft\",\"description\":\"High Availability Software Infrastructure\",\"publisher\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.infrasoft.com.au\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-AU\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#organization\",\"name\":\"Infrasoft\",\"url\":\"https:\/\/www.infrasoft.com.au\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-AU\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/10\/cropped-infrasoft_icon.jpg\",\"contentUrl\":\"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/10\/cropped-infrasoft_icon.jpg\",\"width\":512,\"height\":512,\"caption\":\"Infrasoft\"},\"image\":{\"@id\":\"https:\/\/www.infrasoft.com.au\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/infrasoft-pty-limited\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/ab1cfc963931c33ab30cec69b057ad56\",\"name\":\"website\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-AU\",\"@id\":\"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8ed84048fcdb5afa88338fd16181fdd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8ed84048fcdb5afa88338fd16181fdd?s=96&d=mm&r=g\",\"caption\":\"website\"},\"sameAs\":[\"https:\/\/www.infrasoft.com.au\/\"],\"url\":\"https:\/\/www.infrasoft.com.au\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.infrasoft.com.au\/?p=891","og_locale":"en_US","og_type":"article","og_title":"uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft","og_description":"Introduction HPE NonStop users are becoming more familiar with Kafka, as Kafka in turn becomes more and more prevalent inside large enterprise environments.\u00a0 Kafka is now used by thousands of companies, including 60% of the Fortune 100, and many NonStop shops.\u00a0 Well known users in the finance space include Goldman Sachs, Rabobank, Barclays, Jack Henry [&hellip;]","og_url":"https:\/\/www.infrasoft.com.au\/?p=891","og_site_name":"Infrasoft","article_publisher":"https:\/\/www.linkedin.com\/company\/infrasoft-pty-limited","article_published_time":"2022-10-03T03:06:33+00:00","article_modified_time":"2024-03-28T03:30:39+00:00","og_image":[{"url":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png","type":"","width":"","height":""}],"author":"website","twitter_card":"summary_large_image","twitter_misc":{"Written by":"website","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.infrasoft.com.au\/?p=891#article","isPartOf":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891"},"author":{"name":"website","@id":"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/ab1cfc963931c33ab30cec69b057ad56"},"headline":"uLinga for Kafka &#8211; Support for Custom Code via User Exits","datePublished":"2022-10-03T03:06:33+00:00","dateModified":"2024-03-28T03:30:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891"},"wordCount":912,"commentCount":0,"publisher":{"@id":"https:\/\/www.infrasoft.com.au\/#organization"},"image":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage"},"thumbnailUrl":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png","articleSection":["Uncategorized"],"inLanguage":"en-AU","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.infrasoft.com.au\/?p=891#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.infrasoft.com.au\/?p=891","url":"https:\/\/www.infrasoft.com.au\/?p=891","name":"uLinga for Kafka - Support for Custom Code via User Exits - Infrasoft","isPartOf":{"@id":"https:\/\/www.infrasoft.com.au\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage"},"image":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage"},"thumbnailUrl":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams-1024x461.png","datePublished":"2022-10-03T03:06:33+00:00","dateModified":"2024-03-28T03:30:39+00:00","breadcrumb":{"@id":"https:\/\/www.infrasoft.com.au\/?p=891#breadcrumb"},"inLanguage":"en-AU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.infrasoft.com.au\/?p=891"]}]},{"@type":"ImageObject","inLanguage":"en-AU","@id":"https:\/\/www.infrasoft.com.au\/?p=891#primaryimage","url":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams.png","contentUrl":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2022\/05\/TMF-Audit-Trail-Diagrams.png","width":1103,"height":497},{"@type":"BreadcrumbList","@id":"https:\/\/www.infrasoft.com.au\/?p=891#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infrasoft.com.au\/"},{"@type":"ListItem","position":2,"name":"uLinga for Kafka &#8211; Support for Custom Code via User Exits"}]},{"@type":"WebSite","@id":"https:\/\/www.infrasoft.com.au\/#website","url":"https:\/\/www.infrasoft.com.au\/","name":"Infrasoft","description":"High Availability Software Infrastructure","publisher":{"@id":"https:\/\/www.infrasoft.com.au\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.infrasoft.com.au\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-AU"},{"@type":"Organization","@id":"https:\/\/www.infrasoft.com.au\/#organization","name":"Infrasoft","url":"https:\/\/www.infrasoft.com.au\/","logo":{"@type":"ImageObject","inLanguage":"en-AU","@id":"https:\/\/www.infrasoft.com.au\/#\/schema\/logo\/image\/","url":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/10\/cropped-infrasoft_icon.jpg","contentUrl":"https:\/\/www.infrasoft.com.au\/wp-content\/uploads\/2021\/10\/cropped-infrasoft_icon.jpg","width":512,"height":512,"caption":"Infrasoft"},"image":{"@id":"https:\/\/www.infrasoft.com.au\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/infrasoft-pty-limited"]},{"@type":"Person","@id":"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/ab1cfc963931c33ab30cec69b057ad56","name":"website","image":{"@type":"ImageObject","inLanguage":"en-AU","@id":"https:\/\/www.infrasoft.com.au\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f8ed84048fcdb5afa88338fd16181fdd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8ed84048fcdb5afa88338fd16181fdd?s=96&d=mm&r=g","caption":"website"},"sameAs":["https:\/\/www.infrasoft.com.au\/"],"url":"https:\/\/www.infrasoft.com.au\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/posts\/891"}],"collection":[{"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=891"}],"version-history":[{"count":11,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/posts\/891\/revisions"}],"predecessor-version":[{"id":908,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=\/wp\/v2\/posts\/891\/revisions\/908"}],"wp:attachment":[{"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infrasoft.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}