{"id":313769,"date":"2020-11-25T15:01:49","date_gmt":"2020-11-25T15:01:49","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313769"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313769","title":{"rendered":"\u041a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u0430\u0437\u044b \u0432 Kafka, \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/e7\/jt\/hl\/e7jthlj1d6smgzhh-d0zczyze9s.jpeg\"><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439 \u0411\u0435\u0432\u0437\u0435\u043d\u043a\u043e, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a Delivery Club \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Discovery. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e Delivery Club: \u043c\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0434\u0430\u0447\u0443 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043e\u0432, \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e.<\/p>\n<p>  \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e Kafka Connect: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043a\u0430\u043a\u043e\u0432\u0430 \u043e\u0431\u0449\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kafka, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Kafka Connect. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u043e\u0432, \u0442\u043e \u0432\u044b \u0442\u043e\u0436\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u0432\u043e\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0430\u0448 \u043e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kafka Connect \u0441 \u043d\u0430\u0448\u0438\u043c \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u044b.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u043b\u0430\u043d<\/h3>\n<p>  1. <a href=\"#1\">\u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438<\/a><br \/>  2. <a href=\"#2\">\u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Kafka Connect<\/a><br \/>  2.1. <a href=\"#3\">\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Kafka Connect<\/a><br \/>  3. <a href=\"#4\">\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/a><br \/>  4. <a href=\"#5\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/a><br \/>  4.1. <a href=\"#6\">\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/a><br \/>  4.2. <a href=\"#7\">Jdbc \u0438 Debezium<\/a><br \/>  4.3. <a href=\"#8\">Debezium Connector<\/a><br \/>  4.4. <a href=\"#9\">JdbcSinkConnector<\/a><br \/>  4.5. <a href=\"#10\">\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b<\/a><br \/>  5. <a href=\"#11\">Deploy<\/a><br \/>  5.1. <a href=\"#12\">Deploy Kafka Connect Delivery Club<\/a><br \/>  6. <a href=\"#13\">\u0427\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Kafka Connect<\/a><\/p>\n<p>  <a name=\"1\"><\/a><\/p>\n<h2>\u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  Delivery Club \u2014 \u043d\u0435 \u043c\u043e\u043b\u043e\u0434\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f. \u041e\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2009 \u0433\u043e\u0434\u0430. \u041c\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u043e\u0441\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 10-\u043b\u0435\u0442\u043d\u0438\u0439 Legacy-\u043c\u043e\u043d\u043e\u043b\u0438\u0442. \u041e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0414\u0430, \u043d\u043e\u0432\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043f\u0438\u0448\u0435\u043c. \u0414\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043d\u0430 Go, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430 PHP. \u042d\u0442\u043e \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430 backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 Delivery Club. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0448\u0438\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439: \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0432 \u0448\u0438\u043d\u0443, \u0438 \u043b\u044e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445.<\/p>\n<h3>\u041a\u0430\u043a\u0438\u0435 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f?<\/h3>\n<p>  \u0412 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u0430\u043c\u0438, \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430\u043c\u0438, \u0430\u043f\u0442\u0435\u043a\u0430\u043c\u0438 \u0438 \u0442.\u0434. \u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0430 \u043b\u043e\u0433\u0438\u0441\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043a\u0443\u0440\u044c\u0435\u0440\u0430\u043c\u0438, \u0438\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438, \u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0415\u0441\u0442\u044c \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442\u0434\u0435\u043b R&amp;D, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043e\u043a\u043e\u043b\u043e\u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044b. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0438 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u0438\u043d\u044b \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Apache Kafka. \u041d\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0438\u0439 Legacy \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u0434\u043c\u0438\u043d\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0411\u0435\u0437 \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043d\u0443\u0436\u0434\u044b \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0438\u0445 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f.<\/p>\n<h3>\u0421\u0435\u0440\u0432\u0438\u0441 \u00ab\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u00bb<\/h3>\n<p>  \u041a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0434\u0430\u0447\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0417\u0430 \u043d\u0435\u0451 \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u043c\u043e\u043d\u043e\u043b\u0438\u0442, \u043a\u0430\u043a \u0438 \u0437\u0430 \u0431\u043e\u0312\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0418 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043b\u043e \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438: \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044f\u0440\u043b\u044b\u043a\u0438 \u0443 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0430\u043a\u0446\u0438\u0438. \u0420\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0438\u0445 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u043b\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u043e, \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0434\u0430\u0447\u0430 \u0438 \u0442\u0430\u043a \u0431\u044b\u043b\u0430 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0439.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Go \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0433 \u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0438\u043c\u0435\u0432\u0448\u0438\u0435\u0441\u044f \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0435. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u0438\u043b\u044c\u043d\u043e (\u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430) \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<p>  \u041d\u043e \u043d\u0430\u0448 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438, \u0438 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f.<\/p>\n<h3>\u041a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u044b \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 10-\u043b\u0435\u0442\u043d\u0435\u0433\u043e Legacy<\/h3>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Catalog MVP \u043c\u044b \u0445\u043e\u0434\u0438\u043b\u0438 \u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f (\u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u0435\u043d Time to market). \u041d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430. \u0410 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0434\u044c\u044e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432:<\/p>\n<ol>\n<li><b>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u043b\u0438\u0442.<\/b> \u0422\u0443\u0442 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0434\u043e\u043a\u043b\u0430\u0434\u044b \u0438 \u043a\u043d\u0438\u0433\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u043e\u043b\u0438\u0442. \u042d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0434\u043e\u043b\u0433\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041e\u043d \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0440\u0438\u0441\u043a\u043e\u0432. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u044b \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e, \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e. \u041d\u0435 \u0432 \u0443\u0449\u0435\u0440\u0431 \u0431\u0438\u0437\u043d\u0435\u0441\u0443.<\/li>\n<li><b>\u041f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u044b \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0435.<\/b> \u041d\u0430\u0434\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0435. \u0412 \u044d\u0442\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0448\u0438\u043d\u0443. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u2014 \u043b\u0438\u0448\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u043e Legacy \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 Legacy, \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u0435\u043d \u0438 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d.<\/li>\n<li><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 Kafka.<\/b> \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Kafka Connect.<\/li>\n<\/ol>\n<p>  <a name=\"2\"><\/a><\/p>\n<h2>Kafka Connect<\/h2>\n<p>  <\/p>\n<h3>\u041a\u0430\u043a \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/h3>\n<p>  \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e Kafka \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  Source =&gt; Kafka<\/p>\n<p>  Kafka =&gt; Kafka<\/p>\n<p>  Kafka =&gt; Storage<\/p>\n<p>  Kafka =&gt; App<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tp\/hy\/gy\/tphygyyszmuw8udmsq03floc-lc.jpeg\"><\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u044c\u044e\u043c\u0435\u0440\u044b \u0438 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u044b \u0438 \u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0438 \u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435:<\/p>\n<ul>\n<li>\u041f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c.<\/li>\n<li>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/li>\n<li>\u041f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0435\u0442\u0440\u0430\u0435\u0432.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e API Kafka \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 Java \u0438 Scala. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u043d\u0430\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447: \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 Kafka Connect \u0438 Kafka Streams:<\/p>\n<p>  Source =&gt; Kafka (connect)<\/p>\n<p>  Kafka =&gt; Kafka (streams)<\/p>\n<p>  Kafka =&gt; Storage (connect)<\/p>\n<p>  Kafka =&gt; App<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/x_\/a7\/cc\/x_a7ccj9cnlo788slopvxaaof5m.jpeg\"><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e Kafka Connect \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Kafka, \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a Kafka \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443\/\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0443. \u0420\u0430\u0431\u043e\u0442\u0443 \u0441 Kafka Connect \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0440\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430:<\/p>\n<ul>\n<li><b>worker<\/b> \u2014 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\/\u0441\u0435\u0440\u0432\u0435\u0440 Kafka Connect;<\/li>\n<li><b>connector<\/b> \u2014 Java class + \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438;<\/li>\n<li><b>task<\/b> \u2014 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 connector&#8217;a.<\/li>\n<\/ul>\n<p>  <b>Worker<\/b> \u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Kafka Connect. Kafka Connect \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: standalone \u0438 distributed, \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u043e\u0434\u0430\u0445 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0434\u0438\u043d worker \u0438\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 worker\u2019\u043e\u0432. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c standalone-\u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0430 distributed \u2014 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445.<\/p>\n<h3>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e distributed mode<\/h3>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 worker&#8217;\u0430 Kafka Connect \u0438 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0442\u0440\u0438 connector&#8217;\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c task&#8217;\u043e\u0432.<\/p>\n<ul>\n<li>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, Kafka Connect \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0442\u0430\u0441\u043a\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c. <\/li>\n<li>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, Kafka Connect \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043f\u0435\u0440\u0435\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u0430\u0441\u043a\u0438 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c.<\/li>\n<\/ul>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0451 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0430\u0435\u0442 Kafka Connect:<\/p>\n<ul>\n<li>\u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c (fault tolerance);<\/li>\n<li>\u043f\u0440\u0438\u043d\u0446\u0438\u043f \u00ab\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u00bb (exactly once);<\/li>\n<li>\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (distribution);<\/li>\n<li>\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435 (ordering).<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/eh\/os\/gd\/ehosgdz1ytsy2t0rk4vgr2fl8sw.gif\"><\/p>\n<p>  \u041a\u0430\u043a \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432\u044b\u0448\u0435, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0432 Kafka \u043b\u0438\u0431\u043e \u0438\u0437 Kafka \u0432 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430:<\/p>\n<ul>\n<li>Source Connectors;<\/li>\n<li>Sink Connectors.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mp\/sq\/2d\/mpsq2dnfcrccetyzubhx_yw8c94.jpeg\"><\/p>\n<p>  \u041a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0443\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.confluent.io\/hub\/\">confluent<\/a> \u0438\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 163, \u0430 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u2014 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u043d\u0430 Java \u0438 Scala. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 jar-\u0444\u0430\u0439\u043b, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>  <a name=\"3\"><\/a><\/p>\n<h4>\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Kafka Connect<\/h4>\n<p>  <\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/h3>\n<p>  <b>\u041f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Kafka<\/b><\/p>\n<p>  \u0418\u0434\u0451\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 Kafka \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u044e: <a href=\"http:\/\/kafka.apache.org\/downloads\">http:\/\/kafka.apache.org\/downloads<\/a>.<\/p>\n<p>  Binary downloads:<\/p>\n<ul>\n<li><code>Scala 2.12 - kafka_2.12-2.6.0.tgz (asc, sha512)<\/code><\/li>\n<li><code>Scala 2.13 - kafka_2.13-2.6.0.tgz (asc, sha512)<\/code><\/li>\n<\/ul>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e <code>Scala 2.12 (kafka_2.12-2.6.0.tgz)<\/code>. \u0420\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>kafka_2.12-2.6.0\/bin<\/code>. \u0422\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Apache Kafka (<code>kafka-server-start.sh, kafka-server-stop.sh<\/code>) \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>kafka-console-consumer.sh<\/code>, <code>kafka-console-producer.sh<\/code>. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0442\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Kafka Connect (<code>connect-distributed.sh<\/code>, <code>connect-standalone.sh<\/code>), \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0437\u0430\u0439\u0442\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>kafka_2.12-2.6.0\/config<\/code> \u2014 \u0442\u0430\u043c \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u0430, \u0438 Kafka Connect.<\/p>\n<ul>\n<li><code>connect-distributed.properties<\/code><\/li>\n<li><code>connect-standalone.properties<\/code><\/li>\n<\/ul>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>config\/connect-distributed.properties<\/code>:<\/p>\n<pre><code class=\"markdown\">bootstrap.servers=localhost:9092 rest.port=8083 group.id=connect-cluster key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable=true value.converter.schemas.enable=true internal.key.converter=org.apache.kafka.connect.json.JsonConverter internal.value.converter=org.apache.kafka.connect.json.JsonConverter internal.key.converter.schemas.enable=false internal.value.converter.schemas.enable=false offset.storage.topic=connect-offsets config.storage.topic=connect-configs status.storage.topic=connect-status offset.flush.interval.ms=10000 plugin.path=\/opt\/kafka\/plugins<\/code><\/pre>\n<p>  Kafka Connect \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 standalone. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c connect-distributed (\u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0431\u044b\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u044b\u0448\u0435).<\/p>\n<p>  \u0420\u0435\u0436\u0438\u043c standalone \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Kafka Connect, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"markdown\">cd kafka_2.12-2.6.0 bin\/connect-standalone.sh config\/connect-standalone.properties<\/code><\/pre>\n<p>  <b>Docker<\/b><\/p>\n<p>  \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 Docker-\u043e\u0431\u0440\u0430\u0437\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c CMD \u0432 Dockerfile, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441 Kafka Connect.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"markdown\">CMD [&quot;bin\/connect-distributed.sh&quot;, &quot;cfg\/connect-distributed.properties&quot;]<\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Confluent:<\/p>\n<ul>\n<li>\u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437: <a href=\"https:\/\/hub.docker.com\/r\/confluentinc\/cp-kafka-connect-base\">https:\/\/hub.docker.com\/r\/confluentinc\/cp-kafka-connect-base<\/a><\/li>\n<li>\u043e\u0431\u0440\u0430\u0437 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438: <a href=\"https:\/\/hub.docker.com\/r\/confluentinc\/cp-kafka-connect\">https:\/\/hub.docker.com\/r\/confluentinc\/cp-kafka-connect<\/a><\/li>\n<\/ul>\n<p>  <a name=\"4\"><\/a><\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/h2>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Kafka Connect, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c \u0441\u0432\u043e\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Kafka Connect \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f REST API. \u041f\u043e\u043b\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e \u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/docs.confluent.io\/current\/connect\/references\/restapi.html\">\u0441\u0430\u0439\u0442\u0435<\/a>. \u042f \u043e\u043f\u0438\u0448\u0443 \u043b\u0438\u0448\u044c \u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b Kafka Connect.<\/p>\n<p>  \u0417\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0430\u0448 Kafka Connect:<\/p>\n<pre><code class=\"json\">curl -X GET &quot;${KAFKA_CONNECT_HOST}\/connector-plugins&quot; -H &quot;Content-Type: application\/json&quot;<\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u0432\u0435\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<p>  <code>HTTP\/1.1 200 OK<\/code><\/p>\n<pre><code class=\"json\">[     {         &quot;class&quot;: &quot;io.debezium.connector.mysql.MySqlConnector&quot;     },     {         &quot;class&quot;: &quot;io.confluent.connect.jdbc.JdbcSinkConnector&quot;     } ]<\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c jar \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>plugin.path<\/code> \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Kafka Connect. \u0421\u043c. \u0444\u0430\u0439\u043b <code>connect-distributed.properties<\/code>.<\/p>\n<p>  <b>\u0417\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432:<\/b><\/p>\n<pre><code class=\"json\">curl -X GET &quot;${KAFKA_CONNECT_HOST}\/connectors&quot; -H &quot;Content-Type: application\/json&quot;<\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043c:<\/p>\n<p>  <code>HTTP\/1.1 200 OK<\/code><\/p>\n<pre><code class=\"json\">Content-Type: application\/json   [&quot;my-source-debezium&quot;, &quot;my-sink-jdbc&quot;]<\/code><\/pre>\n<p>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u0434\u0432\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 <code>my-source-debezium<\/code> \u0438 <code>my-sink-jdbc<\/code>.<\/p>\n<p>  <b>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0435<\/b><\/p>\n<p>  \u041e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"json\">curl -X GET &quot;${KAFKA_CONNECT_HOST}\/connectors\/my-sink-jdbc&quot; -H &quot;Content-Type: application\/json&quot;<\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 (config):<\/p>\n<pre><code class=\"json\">curl -X GET &quot;${KAFKA_CONNECT_HOST}\/connectors\/my-sink-jdbc\/config&quot; -H &quot;Content-Type: application\/json&quot;<\/code><\/pre>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 (status):<\/p>\n<pre><code class=\"json\">curl -X GET &quot;${KAFKA_CONNECT_HOST}\/connectors\/my-sink-jdbc\/status&quot; -H &quot;Content-Type: application\/json&quot;<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430<\/h3>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"json\">curl -X POST &quot;${KAFKA_CONNECT_HOST}\/connectors&quot; -H &quot;Content-Type: application\/json&quot; -d '{ \\     &quot;name&quot;: &quot;my-new-connector&quot;, \\     &quot;config&quot;: { \\       &quot;connector.class&quot;: &quot;io.confluent.connect.jdbc.JdbcSinkConnector&quot;, \\       &quot;tasks.max&quot;: 1,       &quot;topics&quot;: &quot;mysql-table01,mysql-table02&quot;, \\       &quot;connection.url&quot;: &quot;jdbc:postgresql:\/\/postgres:5432\/catalog&quot;, \\       &quot;connection.user&quot;: &quot;postgres&quot;, \\       &quot;connection.password&quot;: &quot;postgres&quot;, \\       &quot;auto.create&quot;: &quot;true&quot; \\     } \\   }'<\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c POST \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u043c\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kafka Connect. \u041d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<ul>\n<li><code>name<\/code> \u2014 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f;<\/li>\n<li><code>connector.class<\/code> \u2014 \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430;<\/li>\n<li><code>tasks.max<\/code> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440.<\/li>\n<\/ul>\n<p>  <a name=\"5\"><\/a><\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/h2>\n<p>  \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <code>DebeziumMysqlConnector<\/code> \u0438 <code>JdbcSinkConnector<\/code>. \u0421 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043c\u044b \u0432 Delivery Club \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0443. \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445. <\/p>\n<p>  <a name=\"6\"><\/a><\/p>\n<h4>\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u0432<\/h4>\n<p>  \u041a\u0430\u043a \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043c\u044b \u0432\u044b\u043d\u043e\u0441\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430. \u0421\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u00ab\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0434\u0430\u0447\u0443 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043e\u0432.<\/p>\n<p>  \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u044b\u043b \u043c\u043e\u043d\u043e\u043b\u0438\u0442. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0435\u0449\u0451 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0432 \u0448\u0438\u043d\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f MVP \u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Shared Database. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0432 \u0431\u0430\u0437\u0443 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jf\/o0\/ws\/jfo0wsnnpxdpm6uqcfojfmsebig.jpeg\"><\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0441\u043d\u044f\u043b\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u043d\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0441\u0442\u0430\u0440\u0443\u044e \u0431\u0430\u0437\u0443 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f MVP \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433 \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mr\/zd\/0u\/mrzd0uf6e9-m3ngsy1muovtiffw.jpeg\"><\/p>\n<p>  \u0414\u0432\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0435\u0448\u0430\u043b\u0438:<\/p>\n<ul>\n<li>\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c (\u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f);<\/li>\n<li>\u0440\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<\/ul>\n<p>  <a name=\"7\"><\/a><\/p>\n<h4>Jdbc \u0438 Debezium<\/h4>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0438\u0449\u0435\u0448\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0448\u044c \u2014 <code>JdbcSourceConnector<\/code> \u0438 <code>JdbcSinkConnector<\/code>.<\/p>\n<p>  \u041d\u0430\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 <code>JdbcSinkConnector<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 sink-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430. \u041e\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u043f\u0438\u043a Kafka \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0430\u0437\u0435.<\/p>\n<p>  \u041d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Source-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0431\u0430\u0437\u0443 \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u0430 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u0312\u043b\u044c\u0448\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a. \u041c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0439\u0442\u0438.<\/p>\n<p>  \u041d\u043e \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 <code>DebeziumMysqlConnector<\/code>. \u041e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u043a\u043b\u0430\u0441\u0441\u043d\u0443\u044e \u0432\u0435\u0449\u044c: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a MySQL-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u0430\u044f MySQL-\u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0438 \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0438\u043d\u043b\u043e\u0433. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 MySQL-\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bk\/ol\/ga\/bkolgacnc9geqnexf7zjbk0sole.jpeg\"><\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0443 Debezium-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 Jdbc. \u0422\u0430\u043a \u043a\u0430\u043a Debezium \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u0438\u043d\u043b\u043e\u0433, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0423 Jdbc \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0431\u0435\u0440\u0451\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.<\/p>\n<p>  <a name=\"8\"><\/a><\/p>\n<h4>Debezium Connector<\/h4>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/c0\/ib\/k9\/c0ibk9lgs_ban_op9crojzelzqq.jpeg\"><\/p>\n<p>  \u0412\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/debezium.io\/documentation\/reference\/1.2\/connectors\/mysql.html\">\u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0432\u044b\u0431\u043e\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0424\u0430\u0439\u043b <code>debezium-config.json<\/code>:<\/p>\n<pre><code class=\"json\">{   &quot;name&quot;: &quot;my-debezium-mysql-connector&quot;,   &quot;config&quot;: {     &quot;tasks.msx&quot;: 1,     &quot;connector.class&quot;: &quot;io.debezium.connector.mysql.MySqlConnector&quot;,     &quot;database.hostname&quot;: &quot;${MYSQL_HOST}&quot;,     &quot;database.serverTimezone&quot;: &quot;Europe\/Moscow&quot;,     &quot;database.port&quot;: &quot;${MYSQL_PORT}&quot;,     &quot;database.user&quot;: &quot;${MYSQL_USER}&quot;,     &quot;database.password&quot;: &quot;${MYSQL_PASS}&quot;,     &quot;database.server.id&quot;: &quot;223355&quot;,     &quot;database.server.name&quot;: &quot;monolyth_db&quot;,     &quot;table.whitelist&quot;: &quot;${MYSQL_DB}.table_name1&quot;,     &quot;database.history.kafka.bootstrap.servers&quot;: &quot;${KAFKA_BROKER}&quot;,     &quot;database.history.kafka.topic&quot;: &quot;monolyth_db.debezium.history&quot;,     &quot;database.history.skip.unparseable.ddl&quot;: true,     &quot;snapshot.mode&quot;: &quot;initial&quot;,     &quot;time.precision.mode&quot;: &quot;connect&quot;   } } <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"json\">    &quot;database.hostname&quot;: &quot;${MYSQL_HOST}&quot;,     &quot;database.serverTimezone&quot;: &quot;Europe\/Moscow&quot;,     &quot;database.port&quot;: &quot;${MYSQL_PORT}&quot;,     &quot;database.user&quot;: &quot;${MYSQL_USER}&quot;,     &quot;database.password&quot;: &quot;${MYSQL_PASS}&quot;,<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u0430\u0432\u0430:<\/p>\n<pre><code class=\"json\">GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';<\/code><\/pre>\n<p>  ID \u0440\u0435\u043f\u043b\u0438\u043a\u0438, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440, \u0438 \u0435\u0433\u043e \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code class=\"json\">    &quot;database.server.id&quot;: &quot;223355&quot;,     &quot;database.server.name&quot;: &quot;monolyth_db&quot;,<\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"json\">&quot;table.whitelist&quot;: &quot;${MYSQL_DB}.table_name1,${MYSQL_DB}.table_name2&quot;,<\/code><\/pre>\n<p>  \u0418\u043c\u0435\u043d\u0430 \u0431\u0430\u0437\u044b \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f snapshot&#8217;\u0430:<\/p>\n<pre><code class=\"json\">    &quot;database.history.kafka.bootstrap.servers&quot;: &quot;${KAFKA_BROKER}&quot;,     &quot;database.history.kafka.topic&quot;: &quot;debezium.db.history&quot;,     &quot;snapshot.mode&quot;: &quot;initial&quot;,<\/code><\/pre>\n<p>  <b>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d snapshot<\/b><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 <code>Debezium MySQL<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0432 \u0442\u043e\u043f\u0438\u043a Kafka. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437 \u0431\u0430\u0437\u044b, \u0432 <code>database.history<\/code> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u0441\u044f \u0441\u0445\u0435\u043c\u0430. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c (\u043c\u0435\u043d\u0435\u0435 1 \u041c\u0431).<\/p>\n<p>  \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0432 \u0441\u043d\u0438\u043c\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c:<\/p>\n<pre><code class=\"json\">    &quot;database.history.skip.unparseable.ddl&quot;: true,<\/code><\/pre>\n<p>  \u042d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u043d\u043b\u043e\u0433\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441. \u0421\u0435\u0440\u0432\u0435\u0440 MySQL \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442. \u041d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 <code>DebeziumConnector<\/code>&#8216;\u0435 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0430\u0434\u0430\u0442\u044c, \u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e.<\/p>\n<p>  \u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 time:<\/p>\n<pre><code class=\"json\">\t&quot;time.precision.mode&quot;: &quot;connect&quot;,<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 time \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f production-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0410 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0442\u043e\u043f\u0438\u043a\u043e\u0432. \u0418 \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Debezium \u2014 <code>io.debezium.transforms.ExtractNewRecordState<\/code>. \u041f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/debezium.io\/documentation\/reference\/configuration\/event-flattening.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e: \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Debezium \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 Jdbc.<\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u0441\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Sink-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430, \u0430 Source-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u043e\u043f\u0438\u043a Kafka \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>Debezium MySqlConnector<\/code>:<\/h3>\n<p>  <\/p>\n<pre><code class=\"json\">curl  -X POST ${KAFKA_CONNECT_HOST}\/connectors -H &quot;Content-Type: application\/json&quot; -d @debezium-config.json<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<p>  <code>Connector configuration is invalid and contains the following 1 error(s):<br \/>  Configuration is not defined: database.history.connector.id<br \/>  Configuration is not defined: database.history.connector.class<br \/>  Unable to connect: Communications link failure<\/code><\/p>\n<p>  <code>The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.<br \/>  You can also find the above list of errors at the endpoint `\/connector-plugins\/{connectorType}\/config\/validate````<\/code><\/p>\n<p>  \u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a MySQL. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0430\u0448\u0438 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e (\u0441\u043c. \u0432\u044b\u0448\u0435).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438.<\/p>\n<pre><code class=\"json\">curl  -X GET ${KAFKA_CONNECT_HOST}\/connectors\/my-debezium-mysql-connector\/status<\/code><\/pre>\n<p>  \u041c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442:<\/p>\n<pre><code class=\"json\">{   &quot;name&quot;: &quot;my-debezium-mysql-connector&quot;,   &quot;connector&quot;: {     &quot;state&quot;: &quot;RUNNING&quot;,     &quot;worker_id&quot;: &quot;connect:8080&quot;   },   &quot;tasks&quot;: [     {       &quot;id&quot;: 0,       &quot;state&quot;: &quot;RUNNING&quot;,       &quot;worker_id&quot;: &quot;connect:8080&quot;     }   ],   &quot;type&quot;: &quot;source&quot; }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 source connector, \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u043e\u043f\u0438\u043a\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kafka \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <a href=\"https:\/\/docs.confluent.io\/current\/app-development\/kafkacat-usage.html\">kafkacat<\/a>.<\/p>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043d\u0430\u0448\u0438\u043c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u043e\u043c:<\/p>\n<pre><code class=\"json\">kafkacat -b ${KAFKA_BROKER} -L | grep 'monolyth_db'<\/code><\/pre>\n<p>  \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u043e\u043f\u0438\u043a\u0430 <code>monolyth_db.debezium.history<\/code>:<\/p>\n<pre><code class=\"json\">kafkacat -b ${KAFKA_BROKER} -t monolyth_db.debezium.history -C -f 'Offset: %o\\nKey: %k\\nPayload: %s\\n--\\n'<\/code><\/pre>\n<p>  \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u043e\u043f\u0438\u043a\u0430 <code>monolyth_db.table_name1 (${MYSQL_DB}<\/code> \u2014 \u0438\u043c\u044f \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445):<\/p>\n<pre><code class=\"json\">kafkacat -b ${KAFKA_BROKER} -t monolyth_db.${MYSQL_DB}.table_name1 -C -f 'Offset: %o\\nKey: %k\\nPayload: %s\\n--\\n'<\/code><\/pre>\n<p>  \u0412 \u0442\u043e\u043f\u0438\u043a\u0430\u0445 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 avro (\u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <code>JsonSerializer<\/code> \u0434\u043b\u044f key, value \u0441\u0435\u0440\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432). \u0412\u0438\u0434 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/debezium.io\/documentation\/reference\/1.2\/connectors\/mysql.html#mysql-connector-events_debezium\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p>  <a name=\"9\"><\/a><\/p>\n<h4>JdbcSinkConnector<\/h4>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Sink \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c JdbcSinkConnector.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ea\/h4\/dz\/eah4dzutztdv7ugr_cr1ati_pqw.jpeg\"><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>my-jdbc-sink-connector.json<\/code>:<\/p>\n<pre><code class=\"json\">{   &quot;name&quot;: &quot;my-jdbc-sink-connector&quot;,   &quot;config&quot;: {     &quot;connector.class&quot;: &quot;io.confluent.connect.jdbc.JdbcSinkConnector&quot;,     &quot;tasks.max&quot;: &quot;2&quot;,     &quot;connection.url&quot;: &quot;jdbc:postgresql:\/\/${POSTGRES_HOST}:${POSTGRES_PORT}\/${POSTGRES_DB}&quot;,     &quot;connection.user&quot;: &quot;${POSTGRES_USER}&quot;,     &quot;connection.password&quot;: &quot;${POSTGRES_PASS}&quot;,     &quot;topics&quot;: &quot;monolyth_db.${MYSQL_DB}.table_name1,monolyth_db.${MYSQL_DB}.table_name2&quot;,     &quot;pk.fields&quot;: &quot;id&quot;,     &quot;pk.mode&quot;: &quot;record_key&quot;,     &quot;auto.create&quot;: &quot;false&quot;,     &quot;auto.evolve&quot;: &quot;false&quot;,     &quot;insert.mode&quot;: &quot;upsert&quot;,     &quot;delete.enabled&quot;: &quot;true&quot;,     &quot;transforms&quot;: &quot;route,unwrap,rename_field,ts_updated_at,only_fields&quot;,     &quot;transforms.route.type&quot;: &quot;org.apache.kafka.connect.transforms.RegexRouter&quot;,     &quot;transforms.route.regex&quot;: &quot;([^.]+)\\\\.([^.]+)\\\\.([^.]+)&quot;,     &quot;transforms.route.replacement&quot;: &quot;${PG_DB}.public.$3&quot;,     &quot;transforms.unwrap.type&quot;: &quot;io.debezium.transforms.ExtractNewRecordState&quot;,     &quot;transforms.unwrap.drop.tombstones&quot;: &quot;false&quot;,     &quot;transforms.rename_field.type&quot;: &quot;org.apache.kafka.connect.transforms.ReplaceField$Value&quot;,     &quot;transforms.rename_field.renames&quot;: &quot;isDeleted:is_deleted,isActive:is_active&quot;,     &quot;transforms.ts_updated_at.type&quot;: &quot;org.apache.kafka.connect.transforms.TimestampConverter$Value&quot;,     &quot;transforms.ts_updated_at.target.type&quot;: &quot;Timestamp&quot;,     &quot;transforms.ts_updated_at.field&quot;: &quot;updated_at&quot;,     &quot;transforms.ts_updated_at.format&quot;: &quot;yyyy-MM-dd'T'HH:mm:ssXXX&quot;,     &quot;transforms.only_fields.type&quot;: &quot;org.apache.kafka.connect.transforms.ReplaceField$Value&quot;,     &quot;transforms.only_fields.whitelist&quot;: &quot;id,title,url_tag,sort,hide,created_at,updated_at&quot;   } } <\/code><\/pre>\n<p>  \u0422\u0443\u0442, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0440\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<pre><code class=\"json\">&quot;name&quot;: &quot;my-jdbc-sink-connector&quot;, &quot;connector.class&quot;: &quot;io.confluent.connect.jdbc.JdbcSinkConnector&quot;, &quot;tasks.max&quot;: &quot;2&quot;,<\/code><\/pre>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"json\">&quot;connection.url&quot;: &quot;jdbc:postgresql:\/\/${POSTGRES_HOST}:${POSTGRES_PORT}\/${POSTGRES_DB}&quot;, &quot;connection.user&quot;: &quot;${POSTGRES_USER}&quot;, &quot;connection.password&quot;: &quot;${POSTGRES_PASS}&quot;,<\/code><\/pre>\n<p>  \u041f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"json\">&quot;topics&quot;: &quot;monolyth_db.${MYSQL_DB}.table_name1,monolyth_db.${MYSQL_DB}.table_name2&quot;,<\/code><\/pre>\n<p>  <code>JdbcConnector<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u0442\u043e\u043f\u0438\u043a \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0438\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f route-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440. \u041e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u0430\u0445 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043f\u0438\u043a\u043e\u0432, \u0442\u043e \u0443 \u043d\u0438\u0445 \u0443 \u0432\u0441\u0435\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 <code>pk.fields<\/code>.<\/p>\n<p>  \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 Kafka \u0438\u043c\u0435\u044e\u0442 \u043a\u043b\u044e\u0447, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 (Primary Key) \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e PR \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 <code>pk.fields<\/code>, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e id:<\/p>\n<pre><code class=\"json\">&quot;pk.fields&quot;: &quot;id&quot;, &quot;pk.mode&quot;: &quot;record_key&quot;,<\/code><\/pre>\n<p>  \u041a\u043b\u044e\u0447 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u0442\u0430\u0431\u043b\u0438\u0446:<\/p>\n<pre><code class=\"json\">&quot;pk.fields&quot;: &quot;user_id,service_id&quot;,<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u043d\u043e\u0440\u0435\u0447\u0438\u0432\u044b\u0435. \u041c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446, \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"json\">&quot;auto.create&quot;: &quot;false&quot;, &quot;auto.evolve&quot;: &quot;false&quot;, &quot;insert.mode&quot;: &quot;upsert&quot;, &quot;delete.enabled&quot;: &quot;true&quot;,<\/code><\/pre>\n<p>  <a name=\"10\"><\/a><\/p>\n<h4>\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b<\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u043b\u043e\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"json\">&quot;transforms&quot;: &quot;route, unwrap, rename_field, ts_updated_at, only_fields&quot;,<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c. \u041e\u043d\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 type (\u043a\u043b\u0430\u0441\u0441) \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440 route \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438 \u0438\u043c\u0435\u043d\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"json\">&quot;transforms.route.type&quot;: &quot;org.apache.kafka.connect.transforms.RegexRouter&quot;, &quot;transforms.route.regex&quot;: &quot;([^.]+)\\\\.([^.]+)\\\\.([^.]+)&quot;, &quot;transforms.route.replacement&quot;: &quot;${PG_DB}.public.$3&quot;,<\/code><\/pre>\n<p>  \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Debezium MySqlConnector: \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Kafka \u0442\u043e\u043f\u0438\u043a\u0438 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 <code>{server_name}.{database_name}.{table_name}<\/code>, \u0430 JdbcSinkConnector \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>{database_name}.{schema_name}.{table_name}<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0430\u043c (\u0438 \u0443 \u0432\u0430\u0441 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0438\u043c\u044f \u0431\u0430\u0437\u044b \u0431\u0443\u0434\u0435\u0442 public), \u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0435 \u0438\u043c\u044f \u0442\u043e\u043f\u0438\u043a\u0430.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440 unwrap:<\/p>\n<pre><code class=\"json\">&quot;transforms.unwrap.type&quot;: &quot;io.debezium.transforms.ExtractNewRecordState&quot;, &quot;transforms.unwrap.drop.tombstones&quot;: &quot;false&quot;,<\/code><\/pre>\n<p>  \u041e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 Debezium \u0432 \u0444\u043e\u0440\u043c\u0430\u0442, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 JdbcSinkConnector.<\/p>\n<p>  \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b <code>rename_field<\/code>, <code>ts_updated_at<\/code> \u0438 <code>only_fields<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u0442 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0435\u0445 \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u0430 <code>ts_updated_at<\/code>:<\/p>\n<pre><code class=\"json\">&quot;transforms.ts_updated_at.type&quot;: &quot;org.apache.kafka.connect.transforms.TimestampConverter$Value&quot;, &quot;transforms.ts_updated_at.target.type&quot;: &quot;Timestamp&quot;,  &quot;transforms.ts_updated_at.field&quot;: &quot;updated_at&quot;,  &quot;transforms.ts_updated_at.format&quot;: &quot;yyyy-MM-dd'T'HH:mm:ssXXX&quot;,<\/code><\/pre>\n<p>  <a name=\"11\"><\/a><\/p>\n<h2>Deploy<\/h2>\n<p>  \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443: \u0433\u0434\u0435-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Jenkins, \u0433\u0434\u0435-\u0442\u043e \u2014 Gitlab CI \u0438\u043b\u0438 Bitbucket Pipelines, \u0430 \u043a\u0442\u043e-\u0442\u043e \u043f\u0438\u0448\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b.<\/p>\n<p>  \u0421 Kafka Connect \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<p>  \u041a\u0430\u043a \u044f \u043e\u0442\u043c\u0435\u0447\u0430\u043b, Kafka Connect \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 stateless-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041e\u043d\u043e \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0438 \u0434\u0430\u0436\u0435 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 Kafka. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Kafka \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Kafka Connect. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u044d\u0442\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0438\u044e Kafka Connect 2.5.0 \u0441 Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c 0.10.\u0445.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0431\u0449\u0438\u0445 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u0438 \u043d\u044e\u0430\u043d\u0441\u043e\u0432, \u043a\u0430\u043a \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443 \u043d\u0430\u0441.<\/p>\n<p>  <a name=\"12\"><\/a><\/p>\n<h4>Deploy Kafka Connect \u0432 Delivery Club<\/h4>\n<p>  <b>Kubernetes<\/b><\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0432 \u0441\u0442\u0435\u0439\u0434\u0436 \u043c\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 Docker-\u043e\u0431\u0440\u0430\u0437 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 cp-kafka-connect, \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u043e\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0442\u0435\u0439\u0434\u0436\u0430 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u0432 Kubernetes, \u0447\u0442\u043e \u043c\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438.<\/p>\n<p>  \u041e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e 2 \u0413\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u0443 \u043f\u043e\u0434 Kafka Connect \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0438 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0434\u044b \u043f\u043e 4 \u0413\u0431.<\/p>\n<p>  <b>Production<\/b><\/p>\n<p>  \u041d\u0430 \u043f\u0440\u043e\u0434\u0435 \u0443 \u043d\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432. \u041c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c Kafka Connect \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f Kafka-\u0431\u0440\u043e\u043a\u0435\u0440\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 rpm-\u043f\u0430\u043a\u0435\u0442 \u043e\u0442 Confluent.<\/p>\n<p>  \u0421\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438: \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0445.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u2014 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Kafka Connect \u0432 \u043f\u0440\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<p>  <a name=\"13\"><\/a><\/p>\n<h2>\u0427\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Kafka Connect<\/h2>\n<p>  \u041c\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u044c\u044e\u0441\u0435\u0440\u043e\u0432 \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 600 \u0442\u0430\u0431\u043b\u0438\u0446. \u041f\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430\u043c, \u044d\u0442\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u043e \u043d\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u0440\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u043d\u0438\u0437\u0438\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0434\u0430\u0447\u0438 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043e\u0432 \u0441\u0438\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0437\u0430 \u043e\u0434\u0438\u043d \u043c\u0435\u0441\u044f\u0446.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0448\u0438\u043c\u0438 \u0442\u043e\u043f\u0438\u043a\u0430\u043c\u0438. \u041e\u0446\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u0442\u043e\u0447\u043d\u043e \u044f\u0441\u043d\u043e: \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043d\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0435 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442.<\/p>\n<p>  \u041c\u044b \u0441\u043d\u044f\u043b\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 150 RPS \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0431\u0430\u0437\u0435. \u0418 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u043e\u043b\u0435\u0435 40 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e 300 RPS.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u0432 \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/p>\n<h3>\u0420\u0435\u0437\u044e\u043c\u0435<\/h3>\n<p>  \u042f \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434, \u0447\u0442\u043e \u0432\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u044b:<\/p>\n<ul>\n<li>\u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0441 \u043e\u0431\u0449\u0438\u043c\u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kafka Connect;<\/li>\n<li>\u0443\u0437\u043d\u0430\u043b\u0438, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Kafka Connect \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445;<\/li>\n<li>\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0438 Kafka.<\/li>\n<\/ul>\n<p>  \u0418 \u044f \u0440\u0430\u0434, \u0447\u0442\u043e \u0432\u0430\u0441 \u043d\u0435 \u0438\u0441\u043f\u0443\u0433\u0430\u043b \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u043a \u043d\u0435\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kafka Connect \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/529484\/\"> https:\/\/habr.com\/ru\/company\/mailru\/blog\/529484\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/e7\/jt\/hl\/e7jthlj1d6smgzhh-d0zczyze9s.jpeg\"><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0421\u0435\u0440\u0433\u0435\u0439 \u0411\u0435\u0432\u0437\u0435\u043d\u043a\u043e, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a Delivery Club \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Discovery. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e Delivery Club: \u043c\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0434\u0430\u0447\u0443 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043e\u0432, \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e.<\/p>\n<p>  \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e Kafka Connect: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043a\u0430\u043a\u043e\u0432\u0430 \u043e\u0431\u0449\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Kafka, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Kafka Connect. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442 \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u043e\u0432, \u0442\u043e \u0432\u044b \u0442\u043e\u0436\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0441\u0432\u043e\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0430\u0448 \u043e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Kafka Connect \u0441 \u043d\u0430\u0448\u0438\u043c \u0438 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u044b.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-313769","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=313769"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313769\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}