{"id":38171,"date":"2019-10-31T22:22:03","date_gmt":"2019-10-31T19:22:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1\/"},"modified":"2019-10-31T22:22:03","modified_gmt":"2019-10-31T19:22:03","slug":"ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1","title":{"rendered":"Understanding Message Brokers. Exploring the mechanics of messaging with ActiveMQ and Kafka. Chapter 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello everyone!<\/p>\n<p>Started translating a small book:<br \/>\n&lt;&lt;<b><noindex><a rel=\"nofollow\" href=\"https:\/\/www.oreilly.com\/library\/view\/understanding-message-brokers\/9781492049296\/\">Understanding Message Brokers<\/a><\/noindex><\/b>\" <br \/>\nAuthor: Jakub Korab, Publisher: O'Reilly Media, Inc., Publication Date: June 2017, ISBN: 9781492049296.<\/p>\n<p>From the introduction to the book:<br \/>\n\u2026 <i>This book will teach you to think about messaging systems using brokers by comparing and contrasting two popular broker technologies: Apache ActiveMQ and Apache Kafka. It will provide examples of use cases and the development incentives that led their developers to employ vastly different approaches to the same domain \u2014 messaging between systems with an intermediary broker. We will examine these technologies from the ground up and highlight how various design choices influenced the process. You will gain a deep understanding of both products, how they should and shouldn't be used, and what to consider when evaluating other messaging technologies in the future.<\/i> \u2026<\/p>\n<p>Parts translated so far:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466385\">Chapter 1. Introduction<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466585\">Chapter 3. Kafka<\/a><\/noindex><\/p>\n<p>I will post completed chapters as I translate.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>CHAPTER 1<\/h2>\n<p><\/p>\n<h2>Introduction<\/h2>\n<p>\nInter-system messaging is one of the least understood areas of IT. As a developer or architect, you may be well acquainted with various frameworks and databases. However, it's quite likely that you have only a fleeting understanding of how messaging technologies based on brokers work. If you feel this way, don't worry, you're in good company.<\/p>\n<p>People usually interact with messaging infrastructure very limitedly. They often connect to a system created long ago, or download a distribution from the internet, install it in production, and start writing code for it. Once the infrastructure is up and running in production, results can be ambiguous: message loss during failures, sending doesn't work as you expected, or brokers 'hang' your producers or fail to send messages to your consumers.<\/p>\n<p>Does this sound familiar?<\/p>\n<p>A common scenario is when your messaging code works perfectly\u2014until it doesn\u2019t. This period can lull you into a false sense of security, leading to even more code based on misconceptions about the underlying behavior of the technology. When something starts going wrong, you face the uncomfortable truth: that you didn't really understand the fundamental behavior of the product or the trade-offs made by its authors, such as performance versus reliability, or transactional processing versus horizontal scalability.<\/p>\n<p>Without a deep understanding of how brokers work, people make seemingly reasonable claims about their messaging systems, such as:<\/p>\n<ul>\n<li>The system will never lose messages<\/li>\n<li>Messages will be processed sequentially<\/li>\n<li>Adding consumers will make the system faster<\/li>\n<li>Messages will be delivered exactly once<\/li>\n<\/ul>\n<p>\nUnfortunately, some of these claims are based on assumptions that only hold true under certain circumstances, while others are simply incorrect.<\/p>\n<p>This book will teach you to reason about broker-based messaging systems by comparing and contrasting two popular broker technologies: Apache ActiveMQ and Apache Kafka. It will outline the use cases and development incentives that led their developers to adopt vastly different approaches to the same domain\u2014messaging between systems via an intermediary broker. We will examine these technologies from the ground up and highlight the impact of various design choices along the way. You will gain a deep understanding of both products, insights into when and how to use them, and an awareness of what to look for when considering other messaging technologies in the future.<\/p>\n<p>Before we begin, let's go over the basics.<\/p>\n<h3>What is a Messaging System and why is it needed?<\/h3>\n<p>\nFor two applications to communicate with each other, they must first define an interface. Defining this interface includes selecting a transport or protocol, such as HTTP, MQTT, or SMTP, and agreeing on the message formats that the systems will exchange. This can be a rigorous process, such as defining an XML schema with payload requirements, or it may be much less formal, such as a mutual agreement between two developers that a certain part of the HTTP request will contain a client identifier.<\/p>\n<p>As long as the message format and the order of messages sent between the systems are agreed upon, they will be able to interact with each other without caring about the implementation of the other system. The internals of these systems, such as the programming language or the framework used, may change over time. As long as the contract itself is maintained, interaction can continue unchanged from the other side. These two systems are effectively decoupled by this interface.<\/p>\n<p>Message exchange systems typically involve a mediator between the two systems that interact to further decouple the sender from the receiver or receivers. In this case, the messaging system allows the sender to send a message without knowing where the receiver is, whether they are active, or how many instances of them exist.<\/p>\n<p>Let\u2019s consider a couple of analogies for the types of problems that a messaging system solves and introduce some key terms.<\/p>\n<h4>Point-to-Point<\/h4>\n<p><\/p>\n<blockquote><p>Alexandra goes to the post office to send a package to Adam. She approaches the counter and hands the package to the employee. The employee takes the package and hands Alexandra a receipt. Adam does not need to be home at the time the package is sent. Alexandra is confident that the package will be delivered to Adam at some point in the future and can continue with her business. Later, at some point, Adam receives the package.<\/p><\/blockquote>\n<p>This is an example of a messaging exchange model <i>point-to-point<\/i>. The post office here acts as a mechanism for distributing packages, ensuring that each package is delivered exactly once. Using the post office decouples the act of sending a package from the delivery of the package.<br \/>\nIn traditional messaging systems, the point-to-point model is implemented through <i>queue<\/i>. The queue acts as a FIFO (first in, first out) buffer that can be subscribed to by one or more consumers. Each message is delivered only <i>to one of the subscribed consumers<\/i>. Queues generally try to fairly distribute messages among consumers. Only one consumer will receive this message.<\/p>\n<p>Queues are referred to as \"durable.\" <i>Reliability <\/i> \u2014 this is a property of the service that guarantees the messaging system will retain messages in the absence of active subscribers until a consumer subscribes to the queue for message delivery.<\/p>\n<p>Reliability is often confused with <i>persistence<\/i> and, although these two terms are interchangeable, they serve different functions. Persistence defines whether the messaging system writes a message to some form of storage between receiving it and sending it to the consumer. Messages sent to the queue may or may not be persistent.<br \/>\nPoint-to-point messaging is used when a use case requires a one-time action with a message. An example would be depositing funds into an account or placing an order for delivery. We will discuss later why the messaging system itself cannot guarantee exactly-once delivery and why queues can at best ensure delivery <i>at least once<\/i>.<\/p>\n<h4>Publish-Subscribe<\/h4>\n<p><\/p>\n<blockquote><p>Gabriella dials into the conference call. While she is connected to the conference, she hears everything the speaker says along with the other participants in the call. When she disconnects, she misses what is said. Upon reconnecting, she continues to hear what is being said.<\/p><\/blockquote>\n<p> This is an example of a messaging exchange model <i>publish-subscribe<\/i>. The conference call serves as a broadcast mechanism. The speaker does not care how many people are currently on the call \u2014 the system ensures that anyone who joins at that moment hears what is being said.<br \/>\nIn traditional messaging systems, the publish-subscribe messaging model is implemented through <i>topics<\/i>A topic provides the same way of broadcasting as the conference call mechanism. When a message is sent to a topic, it is distributed <i>to all subscribed users.<\/i>.<\/p>\n<p>Topics are usually <i>non-durable<\/i>. Just like a listener who doesn't hear what's said during a conference call when they disconnect, topic subscribers miss any messages sent while they are offline. For this reason, it's said that topics provide a delivery guarantee <i>at most once <\/i>for each consumer.<\/p>\n<p>Publish-subscribe messaging is typically used when messages are informational and losing a single message is not particularly significant. For example, a topic might transmit temperature readings from a set of sensors once every second. A system interested in the current temperature that subscribes to the topic won't worry if it misses a message\u2014another will follow shortly.<\/p>\n<h4>Hybrid models<\/h4>\n<p><\/p>\n<blockquote><p>The store's website places order messages into a 'message queue.' The primary consumer of these messages is the processing system. Moreover, the audit system must have copies of these order messages for later tracking. Neither system can afford to miss messages, even if the systems themselves are unavailable for a period. The website should not be aware of other systems.<\/p><\/blockquote>\n<p> Use cases often require combining the publish-subscribe and point-to-point messaging models, for example, when multiple systems need a copy of a message, and both reliability and persistence are needed to avoid message loss.<\/p>\n<p>In these cases, a destination (a general term for queues and topics) is required that distributes messages primarily like a topic, ensuring each message is sent to each individual system interested in those messages, but also allowing each system to determine multiple consumers that receive incoming messages, which resembles a queue more closely. The reading type in this case is <i>once for each interested party.<\/i>These hybrid addresses often require reliability, so if a consumer disconnects, messages sent during that time are received after the consumer reconnects.<\/p>\n<p>Hybrid models are not new and can be applied in most messaging systems, including both ActiveMQ (through virtual or composite addresses that combine topics and queues) and Kafka (implicitly, as a fundamental design property of its address).<\/p>\n<p>Now that we have some basic terminology and an understanding of what a messaging system might be useful for, let's move on to the details.<\/p>\n<p><b> Translation completed: <noindex><a rel=\"nofollow\" href=\"http:\/\/tele.gg\/middle_java\">tele.gg\/middle_java<\/a><\/noindex><\/b><\/p>\n<p>Next translated part: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466585\">Chapter 3. Kafka<\/a><\/noindex><\/p>\n<p><i>To be continued...<\/i><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466385\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u0438\u0433\u0438: &#171;Understanding Message Brokers&#171;, \u0430\u0432\u0442\u043e\u0440: Jakub Korab, \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e: O&#8217;Reilly Media, Inc., \u0434\u0430\u0442\u0430 \u0438\u0437\u0434\u0430\u043d\u0438\u044f: June 2017, ISBN: 9781492049296. \u0418\u0437 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a \u043a\u043d\u0438\u0433\u0435: &#171;\u2026 \u042d\u0442\u0430 \u043a\u043d\u0438\u0433\u0430 \u043d\u0430\u0443\u0447\u0438\u0442 \u0432\u0430\u0441 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0430\u0445, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0434\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432: Apache ActiveMQ \u0438 Apache Kafka. \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38171","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u0438\u0433\u0438: &quot;Understanding Message.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c ActiveMQ \u0438 Kafka. \u0413\u043b\u0430\u0432\u0430 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u0438\u0433\u0438: &quot;Understanding Message.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:22:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:22:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Understanding Message Brokers. Exploring the mechanics of messaging through ActiveMQ and Kafka. Chapter 1 | ProHoster","description":"Hello everyone! I started translating a small book: \"Understanding Message.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c ActiveMQ \u0438 Kafka. \u0413\u043b\u0430\u0432\u0430 1 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u0438\u0433\u0438: &quot;Understanding Message.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/ponimanie-brokerov-soobshhenij-izuchenie-mehaniki-obmena-soobshheniyami-posredstvom-activemq-i-kafka-glava-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:22:03+00:00","article:modified_time":"2019-10-31T19:22:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38171","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 20:46:00","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:14:22","updated":"2026-01-23 20:46:00","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=38171"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38171\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=38171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=38171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=38171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}