"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6561],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>s});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){a(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function l(t,e){if(null==t)return{};var n,r,a=function(t,e){if(null==t)return{};var n,r,a={},i=Object.keys(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),m=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},d=function(t){var e=m(t.components);return r.createElement(p.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},k=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,i=t.originalType,p=t.parentName,d=l(t,["components","mdxType","originalType","parentName"]),u=m(n),k=a,s=u["".concat(p,".").concat(k)]||u[k]||c[k]||i;return n?r.createElement(s,o(o({ref:e},d),{},{components:n})):r.createElement(s,o({ref:e},d))}));function s(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var i=n.length,o=new Array(i);o[0]=k;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[u]="string"==typeof t?t:a,o[1]=l;for(var m=2;m<i;m++)o[m]=n[m];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}k.displayName="MDXCreateElement"},9273:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>p,default:()=>s,frontMatter:()=>l,metadata:()=>m,toc:()=>u});var r=n(7462),a=n(3366),i=(n(7294),n(3905)),o=["components"],l={id:"kafka-emitter",title:"Kafka Emitter"},p=void 0,m={unversionedId:"development/extensions-contrib/kafka-emitter",id:"development/extensions-contrib/kafka-emitter",title:"Kafka Emitter",description:"\x3c!--",source:"@site/docs/26.0.0/development/extensions-contrib/kafka-emitter.md",sourceDirName:"development/extensions-contrib",slug:"/development/extensions-contrib/kafka-emitter",permalink:"/docs/26.0.0/development/extensions-contrib/kafka-emitter",draft:!1,tags:[],version:"current",frontMatter:{id:"kafka-emitter",title:"Kafka Emitter"}},d={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Example",id:"example",level:3}],c={toc:u},k="wrapper";function s(t){var e=t.components,n=(0,a.Z)(t,o);return(0,i.kt)(k,(0,r.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"To use this Apache Druid extension, ",(0,i.kt)("a",{parentName:"p",href:"/docs/26.0.0/development/extensions#loading-extensions"},"include")," ",(0,i.kt)("inlineCode",{parentName:"p"},"kafka-emitter")," in the extensions load list."),(0,i.kt)("h2",{id:"introduction"},"Introduction"),(0,i.kt)("p",null,"This extension emits Druid metrics to ",(0,i.kt)("a",{parentName:"p",href:"https://kafka.apache.org"},"Apache Kafka")," directly with JSON format.",(0,i.kt)("br",null),"\nCurrently, Kafka has not only their nice ecosystem but also consumer API readily available.\nSo, If you currently use Kafka, It's easy to integrate various tool or UI\nto monitor the status of your Druid cluster with this extension."),(0,i.kt)("h2",{id:"configuration"},"Configuration"),(0,i.kt)("p",null,"All the configuration parameters for the Kafka emitter are under ",(0,i.kt)("inlineCode",{parentName:"p"},"druid.emitter.kafka"),"."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"property"),(0,i.kt)("th",{parentName:"tr",align:null},"description"),(0,i.kt)("th",{parentName:"tr",align:null},"required?"),(0,i.kt)("th",{parentName:"tr",align:null},"default"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.bootstrap.servers")),(0,i.kt)("td",{parentName:"tr",align:null},"Comma-separated Kafka broker. (",(0,i.kt)("inlineCode",{parentName:"td"},"[hostname:port],[hostname:port]..."),")"),(0,i.kt)("td",{parentName:"tr",align:null},"yes"),(0,i.kt)("td",{parentName:"tr",align:null},"none")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.metric.topic")),(0,i.kt)("td",{parentName:"tr",align:null},"Kafka topic name for emitter's target to emit service metric."),(0,i.kt)("td",{parentName:"tr",align:null},"yes"),(0,i.kt)("td",{parentName:"tr",align:null},"none")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.alert.topic")),(0,i.kt)("td",{parentName:"tr",align:null},"Kafka topic name for emitter's target to emit alert."),(0,i.kt)("td",{parentName:"tr",align:null},"yes"),(0,i.kt)("td",{parentName:"tr",align:null},"none")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.request.topic")),(0,i.kt)("td",{parentName:"tr",align:null},"Kafka topic name for emitter's target to emit request logs. If left empty then request logs will not be sent to the Kafka topic."),(0,i.kt)("td",{parentName:"tr",align:null},"no"),(0,i.kt)("td",{parentName:"tr",align:null},"none")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.producer.config")),(0,i.kt)("td",{parentName:"tr",align:null},"JSON formatted configuration which user want to set additional properties to Kafka producer."),(0,i.kt)("td",{parentName:"tr",align:null},"no"),(0,i.kt)("td",{parentName:"tr",align:null},"none")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"druid.emitter.kafka.clusterName")),(0,i.kt)("td",{parentName:"tr",align:null},"Optional value to specify name of your druid cluster. It can help make groups in your monitoring environment."),(0,i.kt)("td",{parentName:"tr",align:null},"no"),(0,i.kt)("td",{parentName:"tr",align:null},"none")))),(0,i.kt)("h3",{id:"example"},"Example"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'druid.emitter.kafka.bootstrap.servers=hostname1:9092,hostname2:9092\ndruid.emitter.kafka.metric.topic=druid-metric\ndruid.emitter.kafka.alert.topic=druid-alert\ndruid.emitter.kafka.producer.config={"max.block.ms":10000}\n')))}s.isMDXComponent=!0}}]);