java.lang.RuntimeException: wXb6Vnl31u :: Ошибка для HTML= 001 003 004 005 006 007 008 009
010

Ускорение входящей миграции

011 012

Введение

013 014

В этом файле прописаны некоторые советы по ускорению 015 миграции.

016 017

Предварительные требования

018 019

Перед началом работы необходимо удостовериться что POD-ы Кафки и 020 Java настроены корректно ресурсы.

021 022

Java Удостоверьтесь, что в yaml файле mybpm-api, правильно 023 настроен environment JAVA_TOOL_OPTIONS.

024 025

Значение в "-Xms" и "-Xmx" должны быть одинаковы и составлять не 026 более 75% от общей памяти выделенной на сам под. 50% самый 027 безопасный и оптимальный вариант.

028 029

Пример. Если на POD выделено 10Gb, то этому параметру можно 030 выделить не более 7680M или 7Gb (75%). Но лучше поставить 5120M 031 (50%)

032 033 044 045

Kafka Удостоверьтесь, что в yaml файле kafka, правильно настроен 046 environment KAFKA_HEAP_OPTS.

047 048

Правила такие же как для Java, но лимит 50% от памяти POD-а

049 050

Пример. Если на POD выделено 10Gb. То этому параметру нужно 051 выделить 5120M или 5Gb (50%).

052 053 056 057

Основная часть

058 059

Самый простой способ увеличить скорость миграции - увеличить 060 количество консьмеров (consumers), потребляющие сообщения из топика 061 IN_MIGRATION

062 063

Кол-во консьюмеров насраивается в зукипере (ZooKeeper) в 064 директории consumers. Чтобы найти эту директорию:

065 066
    067
  1. Перейдите в ZooNavigator (адрес, на котором он разворачивается, 068 смотрите в docker-compose файле для локалки это - http://localhost:10010)
  2. 070 071
  3. Перейдите в директорию mybpm
  4. 072 073
  5. Далее перейдите в директорию consumers
  6. 074 075
  7. Здесь лежат конфигурации всех коньсьюмеров mybpm-а, кол-во 076 консьюмеров для миграции можно изменить в файле 077 InMigration.workerCount
  8. 078
079 080

Адрес файла в zoonavigator-е 081 "/mybpm/consumers/InMigration.workerCount"

082 083

Правила по установке консьюмеров

084 085
    086
  1. Кол-во консьюмеров никогда не должно превышать количество 087 партиций (partitions) топика (в данном случае топика 088 IN_MIGRATION)
  2. 089 090
  3. Кол-во консьюмеров должно быть делителем числа партиции топика. 091 Например, если в топике IN_MIGRATION 48 партиции, то возможное 092 значение для консьюмеров: 1, 2, 4, 6, 8, 12, 24, 48.
  4. 093 094
  5. Обратите внимание кол-во консьюмеров напрямую зависит от 095 выделенных ресурсов системе. Если памяти недостаточно кафке или 096 Java, то даже увеличив кол-во консьюмеров, вы не ускорите 097 миграцию.
  6. 098 099
  7. Лучший выбор постепенно увеличивать количество по следющему 100 алгоритму: 101 102
      103
    • По дефолту стоит 1 консьюмер, нужно увеличить до 2. Проверить 104 нагрузку на сервер во время миграции.
    • 105 106
    • Если нагрузка в рамках допустимого и миграции стала быстрее, то 107 можно увеличить кол-во консьюмеров еще раз, учитывая 108 вышеприведенные правила (при 48 партициях, следующие значения 109 будут: 4, 6, 8, 12, 24, 48)
    • 110 111
    • Повторять до тех пор, пока не найдете оптимальное значение 112 (скорость перестала увеличиваться или нагрузка слишком 113 большая)
    • 114
    115
  8. 116
117 118

Дополнительные способы

119 120

Увеличить скорость миграции можно также отключив трэкинг времени 121 исполнения методов. Сделать это можно в конфиге в зукипере. Для 122 этого нужно найти InMigrationConfig.

123 124

Адрес конфига в zoonavigator-е 125 "/mybpm/configs/InMigrationConfig.txt"

126 127

В этом конфиге для параметра "trackTimings" нужно поставить 128 значение false. Это даст небольшой прирост скорости.

129 130

Дополнительная информация

131 132

Чтобы посмотреть среднюю скорость миграцию, нужно выполнить 133 SQL-команду:

134 135

SELECT (SUM(inserted_data_counter) / extract(epoch from 136 MAX(finished_at) - MIN(started_at))) as avg_speed FROM 137 in_migration.from_kafka_to_mongo_tracking WHERE started_at >= 138 <время начало миграции>;

139 140

Этот запрос вернет кол-во записей в секунду.

141
142 143 at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:80) at kz.greetgo.md_reader.core.MdConverter.prepareHtmlFileFrom(MdConverter.java:136) at kz.greetgo.md_reader.core.MdConverter.convert(MdConverter.java:208) at kz.greetgo.md_reader.controller.RenderController.downloadToc(RenderController.java:360) at kz.greetgo.md_reader.controller.RenderController.request(RenderController.java:108) at jdk.internal.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at kz.greetgo.md_reader.interceptors.TextReplaceFilter.doFilter(TextReplaceFilter.java:36) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.io.IOException: Server returned HTTP response code: 429 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1397) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1333) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:732) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2101) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247) at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342) at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122) at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:71) ... 48 more