{ "apiVersion": "camel.apache.org/v1", "kind": "Kamelet", "metadata": { "name": "pulsar-source", "annotations": { "camel.apache.org/kamelet.support.level": "Stable", "camel.apache.org/catalog.version": "4.22.1", "camel.apache.org/kamelet.icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDYwLjk3Mzk5OSA0My4wOSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMjQiCiAgIHNvZGlwb2RpOmRvY25hbWU9InB1bHNhci1sb2dvLnN2ZyIKICAgd2lkdGg9IjYwLjk3Mzk5OSIKICAgaGVpZ2h0PSI0My4wOSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjEgKDNiZjVhZTBkMjUsIDIwMjEtMDktMjApIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzI2IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTp6b29tPSIzLjAwNDM2NjIiCiAgICAgaW5rc2NhcGU6Y3g9IjMxLjQ1NDIyMSIKICAgICBpbmtzY2FwZTpjeT0iNDMuNDM2NzgyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDgwIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjQiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPHN0eWxlCiAgICAgICBpZD0ic3R5bGUyIj4uY2xzLTF7ZmlsbDojMTg4ZmZmO30uY2xzLTJ7ZmlsbDojNDY0ZTU2O308L3N0eWxlPgogICAgPGNsaXBQYXRoCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJjbGlwUGF0aDMxNiI+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0MzE4IgogICAgICAgICB3aWR0aD0iNjAuOTczOTQ2IgogICAgICAgICBoZWlnaHQ9IjQzLjUxMzExMSIKICAgICAgICAgeD0iNC4wOTY2MDMzZS0xMCIKICAgICAgICAgeT0iLTAuNDIzMTExMTEiIC8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KICA8dGl0bGUKICAgICBpZD0idGl0bGU2Ij5Bc3NldCAyPC90aXRsZT4KICA8ZwogICAgIGlkPSJMYXllcl8yIgogICAgIGRhdGEtbmFtZT0iTGF5ZXIgMiIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjI5NzE0NDIsMC4wNjg0ODA4NSkiCiAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE2KSI+CiAgICA8ZwogICAgICAgaWQ9IkxheWVyXzEtMiIKICAgICAgIGRhdGEtbmFtZT0iTGF5ZXIgMSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGNsYXNzPSJjbHMtMSIKICAgICAgICAgZD0iTSA2MSwxMy43MyBIIDQ2LjA5IEMgNDIuMDYsNiAzNy44LDAgMzIsMCAyNC40NSwwIDIwLjksNi41OSAxNy40NywxMyBsIC0wLjMsMC41NiBIIDAgdiAzLjgxIGggMTAgYyAzLjUzLDAgNC4yNSwxLjE5IDQuMjUsMS4xOSAtMi43Nyw0LjMgLTYuMSw4LjU1IC0xMS42NSw4LjU1IEggMCB2IDQgaCAyLjYyIGMgMTAuNzYsMCAxNS40NiwtOC43MyAxOS4yMywtMTUuNzQgQyAyNS4zMSw4LjkxIDI3LjcyLDUgMzIsNSBjIDQuNDQsMCA5LjExLDkuNjYgMTMuMjIsMTguMTkgMC42LDEuMjQgMS4yMSwyLjUxIDEuODMsMy43NyAtMTUuNzYsMC41IC0yMy4yNyw0LjE5IC0yOS4zOCw3LjIgLTQuNDcsMi4yIC04LDQuOTMgLTEzLjgxLDQuOTMgSCAwIHYgNCBoIDMuODMgYyA3LDAgMTEuMzYsLTIuMTYgMTYsLTQuNDUgNi40MywtMy4xNiAxMy43MiwtNi43NCAzMC45LC02Ljc0IGggOS45MyB2IC00IGggLTUuNjEgYSAzLDMgMCAwIDEgLTIuNDcsLTEgQyA1MS42LDI1IDUwLjY0LDIzIDQ5LjcsMjEgbCAtMS4zLC0yLjY2IGMgMCwwIDAuOTMsLTEgMy41MSwtMSBIIDYxIFoiCiAgICAgICAgIGlkPSJwYXRoOCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJNIDc5LjgzLDEzLjcgSCA2OS40NCB2IDMuNzQgSCA3OS42IGMgNC4yLDAgNi42MSwxLjkxIDYuNjEsNS4zMyAwLDMuMjQgLTIuNjYsNS4zMyAtNi43Nyw1LjMzIGggLTEwIHYgMTMgaCA0IHYgLTkuMyBoIDUuOTMgYyA1LjQyLDAgMTAuODgsLTIuODMgMTAuODgsLTkuMjIgLTAuMDMsLTUuNCAtNC4xMSwtOC44OCAtMTAuNDIsLTguODggeiIKICAgICAgICAgaWQ9InBhdGgxMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJtIDExMy4zMSwyOS41NyBjIDAsNS4zMSAtMi42Niw4LjI0IC03LjQ4LDguMjQgLTQuODIsMCAtNy42LC0zLjA3IC03LjYsLTguNDMgViAxMy43IGggLTQgdiAxNS44NyBjIDAsNy4zOSA0LjQsMTIgMTEuNDksMTIgNy4wOSwwIDExLjU2LC00LjU3IDExLjU2LC0xMi4yMyBWIDEzLjcgaCAtNCB6IgogICAgICAgICBpZD0icGF0aDEyIiAvPgogICAgICA8cG9seWdvbgogICAgICAgICBjbGFzcz0iY2xzLTIiCiAgICAgICAgIHBvaW50cz0iMTQyLjIyLDQxLjE0IDE0Mi4yMiwzNy4zOSAxMjcuMzMsMzcuMzkgMTI3LjMzLDEzLjcgMTIzLjM2LDEzLjcgMTIzLjM2LDQxLjE0ICIKICAgICAgICAgaWQ9InBvbHlnb24xNCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJNIDE1Ni42OSwyNS41IEMgMTUwLjk1LDI0LjI3IDE0OS45LDIyLjk3IDE0OS45LDIwLjc2IDE0OS45LDE4LjU1IDE1MiwxNyAxNTUsMTcgYSAxMS4xMiwxMS4xMiAwIDAgMSA3LjMyLDIuNzYgbCAwLjQsMC4zMiAyLjM2LC0zLjA4IC0wLjM3LC0wLjMgYSAxNC4yMiwxNC4yMiAwIDAgMCAtOS42MSwtMy4zNiBjIC01LjMyLDAgLTkuMTgsMy4yNCAtOS4xOCw3Ljc5IDAsNS4wNiAzLjcxLDYuOTEgOS4yNyw4LjEyIDUuNTYsMS4yMSA2LjQ5LDIuNDQgNi40OSw0LjYyIDAsMi4zNiAtMi4yMiw0IC01LjQxLDQgLTMuMzcsMCAtNS45LC0xIC04Ljc0LC0zLjYyIGwgLTAuMzgsLTAuMzQgLTIuNDksMi45NSAwLjM2LDAuMzIgYSAxNS45MSwxNS45MSAwIDAgMCAxMS4xNCw0LjM2IGMgNS42MSwwIDkuNTIsLTMuMjggOS41MiwtOCAwLjAxLC00LjI4IC0yLjY4LC02LjY3IC04Ljk5LC04LjA0IHoiCiAgICAgICAgIGlkPSJwYXRoMTYiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGNsYXNzPSJjbHMtMiIKICAgICAgICAgZD0ibSAxODAuMTksMTMuNTEgLTEyLjUsMjcuNjMgaCA0LjE0IGwgMy4xNCwtNyBoIDEzLjc2IGwgMy4xLDcgaCA0LjI5IGwgLTEyLjUsLTI3LjYzIHogbSAtMy42MSwxNyA1LjI5LC0xMS44IDUuMjYsMTEuOCB6IgogICAgICAgICBpZD0icGF0aDE4IiAvPgogICAgICA8cGF0aAogICAgICAgICBjbGFzcz0iY2xzLTIiCiAgICAgICAgIGQ9Im0gMjE1LjE4LDMwLjE1IGMgNC4yOSwtMSA2LjgyLC00IDYuODIsLTguMTEgYSA3Ljc3LDcuNzcgMCAwIDAgLTIuMTgsLTUuNTYgMTEsMTEgMCAwIDAgLTcuODcsLTIuNzkgaCAtMTEuODcgdiAyNy40NSBoIDQgViAzMC44NSBoIDYuODIgbCA3LjY3LDEwLjI4IGggNC45IHogbSAtMTEuMTQsLTMgdiAtOS43MSBoIDcuNjcgYyA0LDAgNi4yOCwxLjcyIDYuMjgsNC44IDAsMy4wOCAtMi40OCw1IC02LjMxLDUgeiIKICAgICAgICAgaWQ9InBhdGgyMCIgLz4KICAgIDwvZz4KICA8L2c+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhODE5Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOnRpdGxlPkFzc2V0IDI8L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KPC9zdmc+Cg==", "camel.apache.org/provider": "Apache Software Foundation", "camel.apache.org/kamelet.group": "Pulsar", "camel.apache.org/kamelet.namespace": "Messaging" }, "labels": { "camel.apache.org/kamelet.type": "source" } }, "spec": { "dependencies": [ "camel:pulsar", "camel:kamelet", "camel:core" ], "definition": { "title": "Pulsar Source", "description": "Receive data from Pulsar topics.", "required": [ "topicType", "topic", "namespaceName", "tenant", "serviceUrl" ], "properties": { "topic": { "title": "Topic Name", "description": "The topic name or regexp", "type": "string" }, "tenant": { "title": "Tenant Name", "description": "The Tenant Name", "type": "string" }, "topicType": { "title": "Topic Type", "description": "The topic type.", "type": "string", "enum": [ "persistent", "non-persistent" ] }, "namespaceName": { "title": "Pulsar Namespace Name", "description": "The Pulsar Namespace Name", "type": "string" }, "serviceUrl": { "title": "Service URL", "description": "The Pulsar Service URL to point while creating the client from URI.", "type": "string" }, "authenticationClass": { "title": "Authentication Class", "description": "The Authentication FQCN to be used while creating the client from URI.", "type": "string" }, "authenticationParams": { "title": "Authentication Params", "description": "The Authentication Parameters to be used while creating the client from URI.", "type": "string" }, "consumerNamePrefix": { "title": "Consumer Name Prefix", "description": "Prefix to add to consumer names when a SHARED or FAILOVER subscription is used", "type": "string", "default": "cons" }, "consumerQueueSize": { "title": "Consumer Queue Size", "description": "Size of the consumer queue", "type": "integer", "default": 10 }, "deadLetterTopic": { "title": "Dead Letter Topic", "description": "Name of the topic where the messages which fail `maxRedeliverCount` times are sent. Note: if not set, default topic name is topicName-subscriptionName-DLQ.", "type": "integer" }, "maxRedeliverCount": { "title": "Maximum Redelivery Count", "description": "Maximum number of times that a message is redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy is created.", "type": "integer" }, "negativeAckRedeliveryDelayMicros": { "title": "Negative Ack Redelivery Delay in Microseconds", "description": "Set the negative acknowledgement delay.", "type": "integer", "default": 60000000 }, "messageListener": { "title": "Message Listener", "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool.", "type": "boolean", "default": true }, "numberOfConsumers": { "title": "Number Of Consumers", "description": "Number of consumers.", "type": "integer", "default": 1 }, "numberOfConsumerThreads": { "title": "Number Of Consumer Threads", "description": "Number of threads to receive and handle messages when using a separate thread pool.", "type": "integer", "default": 1 }, "readCompacted": { "title": "Read Compacted", "description": "Enable compacted topic reading.", "type": "boolean", "default": false }, "subscriptionInitialPosition": { "title": "Subscription Initial Position", "description": "Control the initial position in the topic of a newly created subscription. Default is latest message.", "type": "string", "default": "LATEST", "enum": [ "EARLIEST", "LATEST" ] }, "subscriptionName": { "title": "Subscription Name", "description": "Name of the subscription to use.", "type": "string", "default": "subs" }, "subscriptionTopicsMode": { "title": "Subscription Topics Mode", "description": "Determines to which topics this consumer should be subscribed to - Persistent, Non-Persistent, or both. Only used with pattern subscriptions.", "type": "string", "default": "PersistentOnly", "enum": [ "PersistentOnly", "NonPersistentOnly", "AllTopics" ] }, "subscriptionType": { "title": "Subscription Type", "description": "Type of the subscription.", "type": "string", "default": "EXCLUSIVE", "enum": [ "EXCLUSIVE", "SHARED", "FAILOVER", "KEY_SHARED" ] }, "topicsPattern": { "title": "Topic Pattern", "description": "Whether the topic is a pattern (regular expression) that allows the consumer to subscribe to all matching topics in the namespace.", "type": "boolean", "default": false } }, "type": "object" }, "template": { "from": { "uri": "pulsar:{{topicType}}/{{tenant}}/{{namespaceName}}/{{topic}}", "parameters": { "serviceUrl": "{{serviceUrl}}", "authenticationClass": "{{?authenticationClass}}", "authenticationParams": "{{?authenticationParams}}", "consumerNamePrefix": "{{?consumerNamePrefix}}", "consumerQueueSize": "{{?consumerQueueSize}}", "deadLetterTopic": "{{?deadLetterTopic}}", "maxRedeliverCount": "{{?maxRedeliverCount}}", "negativeAckRedeliveryDelayMicros": "{{?negativeAckRedeliveryDelayMicros}}", "messageListener": "{{?messageListener}}", "numberOfConsumers": "{{?numberOfConsumers}}", "numberOfConsumerThreads": "{{?numberOfConsumerThreads}}", "readCompacted": "{{?readCompacted}}", "subscriptionInitialPosition": "{{?subscriptionInitialPosition}}", "subscriptionName": "{{?subscriptionName}}", "subscriptionTopicsMode": "{{?subscriptionTopicsMode}}", "subscriptionType": "{{?subscriptionType}}", "topicsPattern": "{{?topicsPattern}}" }, "steps": [ { "to": "kamelet:sink" } ] } } }, "propertiesSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Pulsar Source", "description": "Receive data from Pulsar topics.", "required": [ "topicType", "topic", "namespaceName", "tenant", "serviceUrl" ], "properties": { "topic": { "type": "string", "title": "Topic Name", "description": "The topic name or regexp" }, "tenant": { "type": "string", "title": "Tenant Name", "description": "The Tenant Name" }, "topicType": { "type": "string", "title": "Topic Type", "description": "The topic type.", "enum": [ "persistent", "non-persistent" ] }, "namespaceName": { "type": "string", "title": "Pulsar Namespace Name", "description": "The Pulsar Namespace Name" }, "serviceUrl": { "type": "string", "title": "Service URL", "description": "The Pulsar Service URL to point while creating the client from URI." }, "authenticationClass": { "type": "string", "title": "Authentication Class", "description": "The Authentication FQCN to be used while creating the client from URI." }, "authenticationParams": { "type": "string", "title": "Authentication Params", "description": "The Authentication Parameters to be used while creating the client from URI." }, "consumerNamePrefix": { "type": "string", "title": "Consumer Name Prefix", "description": "Prefix to add to consumer names when a SHARED or FAILOVER subscription is used", "default": "cons" }, "consumerQueueSize": { "type": "integer", "title": "Consumer Queue Size", "description": "Size of the consumer queue", "default": 10 }, "deadLetterTopic": { "type": "integer", "title": "Dead Letter Topic", "description": "Name of the topic where the messages which fail `maxRedeliverCount` times are sent. Note: if not set, default topic name is topicName-subscriptionName-DLQ." }, "maxRedeliverCount": { "type": "integer", "title": "Maximum Redelivery Count", "description": "Maximum number of times that a message is redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy is created." }, "negativeAckRedeliveryDelayMicros": { "type": "integer", "title": "Negative Ack Redelivery Delay in Microseconds", "description": "Set the negative acknowledgement delay.", "default": 60000000 }, "messageListener": { "type": "boolean", "title": "Message Listener", "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool.", "default": true }, "numberOfConsumers": { "type": "integer", "title": "Number Of Consumers", "description": "Number of consumers.", "default": 1 }, "numberOfConsumerThreads": { "type": "integer", "title": "Number Of Consumer Threads", "description": "Number of threads to receive and handle messages when using a separate thread pool.", "default": 1 }, "readCompacted": { "type": "boolean", "title": "Read Compacted", "description": "Enable compacted topic reading.", "default": false }, "subscriptionInitialPosition": { "type": "string", "title": "Subscription Initial Position", "description": "Control the initial position in the topic of a newly created subscription. Default is latest message.", "enum": [ "EARLIEST", "LATEST" ], "default": "LATEST" }, "subscriptionName": { "type": "string", "title": "Subscription Name", "description": "Name of the subscription to use.", "default": "subs" }, "subscriptionTopicsMode": { "type": "string", "title": "Subscription Topics Mode", "description": "Determines to which topics this consumer should be subscribed to - Persistent, Non-Persistent, or both. Only used with pattern subscriptions.", "enum": [ "PersistentOnly", "NonPersistentOnly", "AllTopics" ], "default": "PersistentOnly" }, "subscriptionType": { "type": "string", "title": "Subscription Type", "description": "Type of the subscription.", "enum": [ "EXCLUSIVE", "SHARED", "FAILOVER", "KEY_SHARED" ], "default": "EXCLUSIVE" }, "topicsPattern": { "type": "boolean", "title": "Topic Pattern", "description": "Whether the topic is a pattern (regular expression) that allows the consumer to subscribe to all matching topics in the namespace.", "default": false } } } }