"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4739],{3905:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>v});var r=t(67294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(t),m=o,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return t?r.createElement(v,i(i({ref:n},c),{},{components:t})):r.createElement(v,i({ref:n},c))}));function v(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=t[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},44318:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>v,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var r=t(87462),o=t(63366),a=(t(67294),t(3905)),i=["components"],s={id:"dynamic-config-provider",title:"Dynamic Config Providers"},l=void 0,p={unversionedId:"operations/dynamic-config-provider",id:"operations/dynamic-config-provider",title:"Dynamic Config Providers",description:"\x3c!--",source:"@site/docs/28.0.1/operations/dynamic-config-provider.md",sourceDirName:"operations",slug:"/operations/dynamic-config-provider",permalink:"/docs/28.0.1/operations/dynamic-config-provider",draft:!1,tags:[],version:"current",frontMatter:{id:"dynamic-config-provider",title:"Dynamic Config Providers"},sidebar:"docs",previous:{title:"Password providers",permalink:"/docs/28.0.1/operations/password-provider"},next:{title:"TLS support",permalink:"/docs/28.0.1/operations/tls-support"}},c={},d=[{value:"Environment variable dynamic config provider",id:"environment-variable-dynamic-config-provider",level:2}],u={toc:d},m="wrapper";function v(e){var n=e.components,t=(0,o.Z)(e,i);return(0,a.kt)(m,(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Druid relies on dynamic config providers to supply multiple related sets of credentials, secrets, and configurations within a Druid extension. Dynamic config providers are intended to eventually replace ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/operations/password-provider"},"PasswordProvider"),"."),(0,a.kt)("p",null,"By default, Druid includes an environment variable dynamic config provider that supports Kafka consumer configuration in ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/development/extensions-core/kafka-ingestion"},"Kafka ingestion"),"."),(0,a.kt)("p",null,"To develop a custom extension of the ",(0,a.kt)("inlineCode",{parentName:"p"},"DynamicConfigProvider")," interface that is registered at Druid process startup, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/28.0.1/development/modules#adding-a-new-dynamicconfigprovider-implementation"},"Adding a new DynamicConfigProvider implementation"),"."),(0,a.kt)("h2",{id:"environment-variable-dynamic-config-provider"},"Environment variable dynamic config provider"),(0,a.kt)("p",null,"You can use the environment variable dynamic config provider (",(0,a.kt)("inlineCode",{parentName:"p"},"EnvironmentVariableDynamicConfigProvider"),") to store passwords or other sensitive information using system environment variables instead of plain text configuration."),(0,a.kt)("p",null,"The environment variable dynamic config provider uses the following syntax:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'druid.dynamic.config.provider={"type": "environment","variables":{"secret1": "SECRET1_VAR","secret2": "SECRET2_VAR"}}\n')),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Field"),(0,a.kt)("th",{parentName:"tr",align:null},"Type"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"),(0,a.kt)("th",{parentName:"tr",align:null},"Required"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"type")),(0,a.kt)("td",{parentName:"tr",align:null},"String"),(0,a.kt)("td",{parentName:"tr",align:null},"dynamic config provider type"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes: ",(0,a.kt)("inlineCode",{parentName:"td"},"environment"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"variables")),(0,a.kt)("td",{parentName:"tr",align:null},"Map"),(0,a.kt)("td",{parentName:"tr",align:null},"environment variables that store the configuration information"),(0,a.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,a.kt)("p",null,"When using the environment variable config provider, consider the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"If you manually specify a configuration key-value pair and use the dynamic config provider for the same key, Druid uses the value from the dynamic config provider."),(0,a.kt)("li",{parentName:"ul"},"For use in a supervisor spec, environment variables must be available to the system user that runs the Overlord service and that runs the Peon service.")),(0,a.kt)("p",null,"The following example shows how to configure environment variables to store the SSL key and truststore passwords for Kafka."),(0,a.kt)("p",null,"On the Overlord and Peon machines, set the following environment variables for the system user that runs the Druid services:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"export SSL_KEY_PASSWORD=mysecretkeypassword\nexport SSL_KEYSTORE_PASSWORD=mysecretkeystorepassword\nexport SSL_TRUSTSTORE_PASSWORD=mysecrettruststorepassword\n")),(0,a.kt)("p",null,"When you define the consumer properties in the supervisor spec, use the dynamic config provider to refer to the environment variables:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'...\n   "consumerProperties": {\n        "bootstrap.servers": "localhost:9092",\n        "ssl.keystore.location": "/opt/kafka/config/kafka01.keystore.jks",\n        "ssl.truststore.location": "/opt/kafka/config/kafka.truststore.jks",\n        "druid.dynamic.config.provider": {\n          "type": "environment",\n          "variables": {\n            "ssl.key.password": "SSL_KEY_PASSWORD",\n            "ssl.keystore.password": "SSL_KEYSTORE_PASSWORD",\n            "ssl.truststore.password": "SSL_TRUSTSTORE_PASSWORD"\n          }\n        }\n      },\n...\n')),(0,a.kt)("p",null,"When connecting to Kafka, Druid replaces the environment variables with their corresponding values."))}v.isMDXComponent=!0}}]);