"use strict";(self.webpackChunkrocketmq_docs=self.webpackChunkrocketmq_docs||[]).push([[5345],{15680:(e,t,r)=>{r.d(t,{xA:()=>u,yg:()=>y});var n=r(96540);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),s=l(r),m=o,y=s["".concat(p,".").concat(m)]||s[m]||f[m]||a;return r?n.createElement(y,c(c({ref:t},u),{},{components:r})):n.createElement(y,c({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[s]="string"==typeof e?e:o,c[1]=i;for(var l=2;l<a;l++)c[l]=r[l];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},54988:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>f,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(58168),o=(r(96540),r(15680));const a={title:"RocketMQ OpenMLDB Connector\uff0c\u5b9e\u65f6\u6570\u636e\u5230\u7279\u5f81\u5de5\u7a0b\u7684\u9ad8\u901f\u4f20\u8f93"},c=void 0,i={permalink:"/zh/news/01",source:"@site/news/01.md",title:"RocketMQ OpenMLDB Connector\uff0c\u5b9e\u65f6\u6570\u636e\u5230\u7279\u5f81\u5de5\u7a0b\u7684\u9ad8\u901f\u4f20\u8f93",description:"",date:"2024-03-25T09:46:12.000Z",formattedDate:"2024\u5e743\u670825\u65e5",tags:[],readingTime:0,hasTruncateMarker:!1,authors:[],frontMatter:{title:"RocketMQ OpenMLDB Connector\uff0c\u5b9e\u65f6\u6570\u636e\u5230\u7279\u5f81\u5de5\u7a0b\u7684\u9ad8\u901f\u4f20\u8f93"},nextItem:{title:"RocketMQ-Streams \u9996\u4e2a\u7248\u672c\u53d1\u5e03\uff0c\u8f7b\u91cf\u7ea7\u8ba1\u7b97\u7684\u65b0\u9009\u62e9",permalink:"/zh/news/02"}},p={authorsImageUrls:[]},l=[],u={toc:l},s="wrapper";function f(e){let{components:t,...r}=e;return(0,o.yg)(s,(0,n.A)({},u,r,{components:t,mdxType:"MDXLayout"}))}f.isMDXComponent=!0}}]);