"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3370],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>v});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=a,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(v,i(i({ref:t},c),{},{components:n})):r.createElement(v,i({ref:t},c))}));function v(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:a,i[1]=s;for(var p=2;p<o;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},50355:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>v,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var r=n(87462),a=n(63366),o=(n(67294),n(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/latest/operations/dynamic-config-provider.md",sourceDirName:"operations",slug:"/operations/dynamic-config-provider",permalink:"/docs/latest/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/latest/operations/password-provider"},next:{title:"TLS support",permalink:"/docs/latest/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 t=e.components,n=(0,a.Z)(e,i);return(0,o.kt)(m,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.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,o.kt)("a",{parentName:"p",href:"/docs/latest/operations/password-provider"},"PasswordProvider"),"."),(0,o.kt)("p",null,"By default, Druid includes an environment variable dynamic config provider that supports Kafka consumer configuration in ",(0,o.kt)("a",{parentName:"p",href:"/docs/latest/development/extensions-core/kafka-ingestion"},"Kafka ingestion"),"."),(0,o.kt)("p",null,"To develop a custom extension of the ",(0,o.kt)("inlineCode",{parentName:"p"},"DynamicConfigProvider")," interface that is registered at Druid process startup, see ",(0,o.kt)("a",{parentName:"p",href:"/docs/latest/development/modules#adding-a-new-dynamicconfigprovider-implementation"},"Adding a new DynamicConfigProvider implementation"),"."),(0,o.kt)("h2",{id:"environment-variable-dynamic-config-provider"},"Environment variable dynamic config provider"),(0,o.kt)("p",null,"You can use the environment variable dynamic config provider (",(0,o.kt)("inlineCode",{parentName:"p"},"EnvironmentVariableDynamicConfigProvider"),") to store passwords or other sensitive information using system environment variables instead of plain text configuration."),(0,o.kt)("p",null,"The environment variable dynamic config provider uses the following syntax:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'druid.dynamic.config.provider={"type": "environment","variables":{"secret1": "SECRET1_VAR","secret2": "SECRET2_VAR"}}\n')),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Field"),(0,o.kt)("th",{parentName:"tr",align:null},"Type"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Required"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"type")),(0,o.kt)("td",{parentName:"tr",align:null},"String"),(0,o.kt)("td",{parentName:"tr",align:null},"dynamic config provider type"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes: ",(0,o.kt)("inlineCode",{parentName:"td"},"environment"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("inlineCode",{parentName:"td"},"variables")),(0,o.kt)("td",{parentName:"tr",align:null},"Map"),(0,o.kt)("td",{parentName:"tr",align:null},"environment variables that store the configuration information"),(0,o.kt)("td",{parentName:"tr",align:null},"Yes")))),(0,o.kt)("p",null,"When using the environment variable config provider, consider the following:"),(0,o.kt)("ul",null,(0,o.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,o.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,o.kt)("p",null,"The following example shows how to configure environment variables to store the SSL key and truststore passwords for Kafka."),(0,o.kt)("p",null,"On the Overlord and Peon machines, set the following environment variables for the system user that runs the Druid services:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"export SSL_KEY_PASSWORD=mysecretkeypassword\nexport SSL_KEYSTORE_PASSWORD=mysecretkeystorepassword\nexport SSL_TRUSTSTORE_PASSWORD=mysecrettruststorepassword\n")),(0,o.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,o.kt)("pre",null,(0,o.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,o.kt)("p",null,"When connecting to Kafka, Druid replaces the environment variables with their corresponding values."))}v.isMDXComponent=!0}}]);