"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6460],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>m});var t=r(67294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function i(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function o(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?i(Object(r),!0).forEach((function(n){a(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function s(e,n){if(null==e)return{};var r,t,a=function(e,n){if(null==e)return{};var r,t,a={},i=Object.keys(e);for(t=0;t<i.length;t++)r=i[t],n.indexOf(r)>=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)r=i[t],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var d=t.createContext({}),l=function(e){var n=t.useContext(d),r=n;return e&&(r="function"==typeof e?e(n):o(o({},n),e)),r},c=function(e){var n=l(e.components);return t.createElement(d.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},g=t.forwardRef((function(e,n){var r=e.components,a=e.mdxType,i=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(r),g=a,m=p["".concat(d,".").concat(g)]||p[g]||u[g]||i;return r?t.createElement(m,o(o({ref:n},c),{},{components:r})):t.createElement(m,o({ref:n},c))}));function m(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=g;var s={};for(var d in n)hasOwnProperty.call(n,d)&&(s[d]=n[d]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var l=2;l<i;l++)o[l]=r[l];return t.createElement.apply(null,o)}return t.createElement.apply(null,r)}g.displayName="MDXCreateElement"},52737:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=r(87462),a=r(63366),i=(r(67294),r(3905)),o=["components"],s={id:"middlemanager",title:"MiddleManager service",sidebar_label:"MiddleManager"},d=void 0,l={unversionedId:"design/middlemanager",id:"design/middlemanager",title:"MiddleManager service",description:"\x3c!--",source:"@site/docs/29.0.1/design/middlemanager.md",sourceDirName:"design",slug:"/design/middlemanager",permalink:"/docs/29.0.1/design/middlemanager",draft:!1,tags:[],version:"current",frontMatter:{id:"middlemanager",title:"MiddleManager service",sidebar_label:"MiddleManager"},sidebar:"docs",previous:{title:"Historical",permalink:"/docs/29.0.1/design/historical"},next:{title:"Peon",permalink:"/docs/29.0.1/design/peons"}},c={},p=[{value:"Configuration",id:"configuration",level:2},{value:"HTTP endpoints",id:"http-endpoints",level:2},{value:"Running",id:"running",level:2}],u={toc:p},g="wrapper";function m(e){var n=e.components,r=(0,a.Z)(e,o);return(0,i.kt)(g,(0,t.Z)({},u,r,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The MiddleManager service is a worker service that executes submitted tasks. MiddleManagers forward tasks to ",(0,i.kt)("a",{parentName:"p",href:"/docs/29.0.1/design/peons"},"Peons")," that run in separate JVMs.\nDruid uses separate JVMs for tasks to isolate resources and logs. Each Peon is capable of running only one task at a time, wheres a MiddleManager may have multiple Peons."),(0,i.kt)("h2",{id:"configuration"},"Configuration"),(0,i.kt)("p",null,"For Apache Druid MiddleManager service configuration, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/29.0.1/configuration/#middlemanager-and-peons"},"MiddleManager and Peons"),"."),(0,i.kt)("p",null,"For basic tuning guidance for the MiddleManager service, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/29.0.1/operations/basic-cluster-tuning#middlemanager"},"Basic cluster tuning"),"."),(0,i.kt)("h2",{id:"http-endpoints"},"HTTP endpoints"),(0,i.kt)("p",null,"For a list of API endpoints supported by the MiddleManager, see the ",(0,i.kt)("a",{parentName:"p",href:"/docs/29.0.1/api-reference/service-status-api#middlemanager"},"Service status API reference"),"."),(0,i.kt)("h2",{id:"running"},"Running"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"org.apache.druid.cli.Main server middleManager\n")))}m.isMDXComponent=!0}}]);