"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[941],{15680:(e,n,r)=>{r.d(n,{xA:()=>c,yg:()=>m});var t=r(96540);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"},41129:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var t=r(58168),a=r(98587),i=(r(96540),r(15680)),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.0/design/middlemanager.md",sourceDirName:"design",slug:"/design/middlemanager",permalink:"/docs/29.0.0/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.0/design/historical"},next:{title:"Peon",permalink:"/docs/29.0.0/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.A)(e,o);return(0,i.yg)(g,(0,t.A)({},u,r,{components:n,mdxType:"MDXLayout"}),(0,i.yg)("p",null,"The MiddleManager service is a worker service that executes submitted tasks. MiddleManagers forward tasks to ",(0,i.yg)("a",{parentName:"p",href:"/docs/29.0.0/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.yg)("h2",{id:"configuration"},"Configuration"),(0,i.yg)("p",null,"For Apache Druid MiddleManager service configuration, see ",(0,i.yg)("a",{parentName:"p",href:"/docs/29.0.0/configuration/#middlemanager-and-peons"},"MiddleManager and Peons"),"."),(0,i.yg)("p",null,"For basic tuning guidance for the MiddleManager service, see ",(0,i.yg)("a",{parentName:"p",href:"/docs/29.0.0/operations/basic-cluster-tuning#middlemanager"},"Basic cluster tuning"),"."),(0,i.yg)("h2",{id:"http-endpoints"},"HTTP endpoints"),(0,i.yg)("p",null,"For a list of API endpoints supported by the MiddleManager, see the ",(0,i.yg)("a",{parentName:"p",href:"/docs/29.0.0/api-reference/service-status-api#middlemanager"},"Service status API reference"),"."),(0,i.yg)("h2",{id:"running"},"Running"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre"},"org.apache.druid.cli.Main server middleManager\n")))}m.isMDXComponent=!0}}]);