{"id":493415,"date":"2026-09-03T22:21:11","date_gmt":"2026-09-03T22:21:11","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=493415"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=493415","title":{"rendered":"Kafka Connect \u0431\u0435\u0437\u00a0\u043c\u0430\u0433\u0438\u0438: \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0435\u00a0\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, <strong>\u0431\u043e\u0439\u0446\u044b<\/strong>, \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445? <\/p>\n<p>\u0415\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0PostgreSQL \u0432\u00a0Kafka. \u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441.<\/p>\n<p>\u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <code>SELECT<\/code>, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 Kafka Producer. \u041d\u0430\u00a0\u0441\u0445\u0435\u043c\u0435 \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2b2\/3f8\/62c\/2b23f862c4fbab83ccd782be310d7b15.png\" width=\"2278\" height=\"878\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2b2\/3f8\/62c\/2b23f862c4fbab83ccd782be310d7b15.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2b2\/3f8\/62c\/2b23f862c4fbab83ccd782be310d7b15.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u00a0\u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b?<\/p>\n<\/li>\n<li>\n<p>\u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f?<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430?<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0449\u0443\u0449\u0430\u0435\u0442\u0435 \u0447\u0435\u043c \u043f\u043e\u043f\u0430\u0445\u0438\u0432\u0430\u0435\u0442? \u0412\u043c\u0435\u0441\u0442\u043e \u00ab\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441. \u0415\u0433\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p><strong>Kafka Connect<\/strong> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0438\u0437\u00a0\u043a\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442, \u043a\u0430\u043a\u00a0\u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u00a0\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 (worker) \u0438 \u0433\u0434\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>PS. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430\u00a0tg \u043a\u0430\u043d\u0430\u043b \u0441\u00a0\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0439\u00a0\u2014 <\/strong><a href=\"https:\/\/t.me\/letsgolanging\" rel=\"noopener nofollow\"><strong>Telegram<\/strong><\/a><strong>\ud83d\ude42<\/strong><\/p>\n<h3>\u0427\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 Kafka Connect<\/h3>\n<p><strong>Kafka Connect<\/strong> \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 <strong>Apache Kafka<\/strong> \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Kafka \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438.<\/p>\n<p>\u0423\u00a0\u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ab\/4b7\/5f8\/0ab4b75f8e39f8bed95b2c939babe2ec.png\" width=\"1680\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0ab\/4b7\/5f8\/0ab4b75f8e39f8bed95b2c939babe2ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0ab\/4b7\/5f8\/0ab4b75f8e39f8bed95b2c939babe2ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0430 \u00ab\u0442\u043e \u0438 \u043e\u0442\u043a\u0443\u0434\u0430\u00bb \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>Source Connector<\/strong> \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0438\u0448\u0435\u0442 \u0438\u0445 \u0432\u00a0Kafka<\/p>\n<\/li>\n<li>\n<p><strong>Sink Connector<\/strong> \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u00a0Kafka \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432\u043e\u00a0\u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443<\/p>\n<\/li>\n<\/ul>\n<p><strong>Kafka Connect<\/strong> \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u00a0\u0447\u0438\u0442\u0430\u0442\u044c PostgreSQL \u0438\u043b\u0438\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u00a0S3. \u042d\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b. \u0410\u00a0Connect \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 offsets, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0434\u0430\u0447 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f REST API.<\/p>\n<h3>Worker, Connector \u0438 Task<\/h3>\n<p>\u0412 <strong>Kafka Connect<\/strong> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0440\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438<\/p>\n<h4>Worker<\/h4>\n<p><strong>Worker<\/strong> \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Kafka Connect. \u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c: \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u00a0REST API, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u00a0Kafka.<\/p>\n<h4>Connector<\/h4>\n<p><strong>Connector<\/strong> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8af\/e52\/8fe\/8afe528fe880be71bebd9cb9f14c5589.png\" width=\"1624\" height=\"756\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8af\/e52\/8fe\/8afe528fe880be71bebd9cb9f14c5589.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8af\/e52\/8fe\/8afe528fe880be71bebd9cb9f14c5589.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u00a0\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443, \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0435\u0436\u0438\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. <strong>Connector<\/strong> \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c.<\/p>\n<h4>Task<\/h4>\n<p><strong>Task<\/strong> \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u044b. \u0418\u043c\u0435\u043d\u043d\u043e task \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438\u043b\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432\u00a0\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a.<\/p>\n<p>\u041e\u0434\u0438\u043d <strong>connector<\/strong> \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <strong>tasks<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e <strong>Kafka Connect<\/strong> \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 <strong>worker&#8217;<\/strong>\u0430\u043c\u0438.<\/p>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: <code>tasks.max: \u0447\u0438\u0441\u043b\u043e<\/code>. \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00ab\u0441\u043e\u0437\u0434\u0430\u0439 \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\u00bb, \u0430\u00a0\u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430. \u041f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 tasks, \u0435\u0441\u043b\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c.<\/p>\n<h3>\u041e\u0442\u043a\u0443\u0434\u0430 Connect \u0437\u043d\u0430\u0435\u0442, \u043d\u0430\u00a0\u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f<\/h3>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0438\u0434\u0435\u0439 Kafka Connect \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430\u00a0\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0430\u043c\u043e\u0439 Kafka.<\/p>\n<p>\u0412\u00a0Kafka \u0442\u043e\u043f\u0438\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430\u00a0\u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u0430\u00a0\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f offset&#8217;\u043e\u043c.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/646\/0ee\/e2d\/6460eee2deeea7f06979cf6288fed378.png\" width=\"1194\" height=\"736\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/646\/0ee\/e2d\/6460eee2deeea7f06979cf6288fed378.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/646\/0ee\/e2d\/6460eee2deeea7f06979cf6288fed378.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><strong>Kafka Connect<\/strong> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u043a\u00a0\u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c <strong>source partitions<\/strong>. \u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f, <strong>source offset<\/strong>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u00a0PostgreSQL<strong> users <\/strong>\u0441\u00a0\u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <strong>id<\/strong>. \u0422\u043e\u0433\u0434\u0430 \u0432 <strong>source offset <\/strong>\u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f id <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439<\/strong> \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430\u00a0\u0432 <strong>source partition <\/strong>\u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c <strong>users<\/strong>. \u0415\u0441\u043b\u0438 <strong>task <\/strong>\u0443\u043f\u0430\u043b, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439:<\/p>\n<pre><code class=\"sql\">SELECT * FROM users  WHERE id &gt; 10ORDER BY id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 source partition \u0438 source offset \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d.<\/p>\n<p>\u0423 <strong>sink connector<\/strong>&#8216;\u043e\u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f. \u041e\u043d\u0438 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 Kafka partitions \u043a\u0430\u043a\u00a0consumer \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Kafka offsets \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<h3>Standalone \u0438 Distributed Mode<\/h3>\n<p>Kafka Connect \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u00a0\u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.<\/p>\n<h4>Standalone Mode<\/h4>\n<p>\u0412 <strong>standalone<\/strong>\u2011\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0422\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. Source offsets \u0432\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<h4>Distributed Mode<\/h4>\n<p>\u0412\u00a0distributed\u2011\u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <strong>worker<\/strong>&#8216;\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c, \u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, <code>group.id<\/code> \u0438 \u0438\u043c\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0442\u043e\u043f\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e worker \u043f\u0430\u0434\u0430\u0435\u0442, \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0443\u0442 \u043d\u0430\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u041f\u0440\u0438\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e worker&#8217;\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b.<\/p>\n<p>\u0412\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 Kafka Connect \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u00a0\u0441\u0430\u043c\u043e\u0439 Kafka. \u0412\u00a0\u0442\u043e\u043f\u0438\u043a\u0430\u0445: <\/p>\n<ul>\n<li>\n<p><code>connect-configs<\/code>\u00a0\u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 connector&#8217;\u043e\u0432 \u0438 tasks<\/p>\n<\/li>\n<li>\n<p><code>connect-offsets<\/code>\u00a0\u2014 offsets source connector&#8217;\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><code>connect-statuses<\/code>\u00a0\u2014 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f connector&#8217;\u043e\u0432 \u0438 tasks<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u00a0\u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/h3>\n<p>\u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Connect \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f fail\u2011fast \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 SMT \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c task.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: <code>errors.tolerance=all<\/code><\/p>\n<p>\u041d\u043e\u00a0\u0441\u0430\u043c\u0430 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u044d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043f\u0430\u0441\u043d\u0430. Pipeline \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u043c, \u0445\u043e\u0442\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u0430.<\/p>\n<p>\u041a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: <code>errors.log.enable=true<\/code> \u0438 <code>errors.log.include.messages=false<\/code><\/p>\n<h3>SMT: \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0434\u043e\u0440\u043e\u0433\u0435<\/h3>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0Kafka \u0438\u043b\u0438\u00a0\u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<ul>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u0435<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0Kafka Connect \u0435\u0441\u0442\u044c Single Message Transformations \u0438\u043b\u0438 <strong>SMT<\/strong>. \u041e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 REST API<\/h3>\n<p>Kafka Connect \u0437\u0430\u0434\u0443\u043c\u0430\u043d \u043a\u0430\u043a\u00a0\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 HTTP.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b:<\/p>\n<pre><code class=\"markdown\">GET    \/connector-pluginsGET    \/connectorsPOST   \/connectorsGET    \/connectors\/{name}GET    \/connectors\/{name}\/statusPUT    \/connectors\/{name}\/configPUT    \/connectors\/{name}\/pausePUT    \/connectors\/{name}\/resumePUT    \/connectors\/{name}\/stopPOST   \/connectors\/{name}\/restart?includeTasks=true&amp;onlyFailed=trueDELETE \/connectors\/{name}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0446\u0435\u043b\u043e\u043c, \u0442\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u044b\u0439 <strong>API<\/strong>.<\/p>\n<h3>\u041a\u043e\u0433\u0434\u0430 Kafka Connect \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0430\u00a0\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442<\/h3>\n<p>Kafka Connect \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p>\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 Kafka<\/p>\n<\/li>\n<li>\n<p>Kafka\u00a0\u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/p>\n<\/li>\n<li>\n<p>Kafka\u00a0\u2014 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/p>\n<\/li>\n<li>\n<p>Kafka\u00a0\u2014 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0430\u0437\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f\u00a0\u043e\u0431\u0435\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u0440\u0435\u043b\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 connector. <\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0437\u0443\u043c\u043d\u0435\u0435, \u0435\u0441\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u0432\u043d\u0443\u0442\u0440\u0438 pipeline \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u043d\u0443\u0436\u043d\u044b join, \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438, \u043e\u043a\u043d\u0430 \u0438\u043b\u0438\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439, \u0430\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0435\u0442<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e\u00a0\u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 connector.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u0435\u0440\u0435\u043d\u043e\u0441 JSON\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0Kafka<\/h3>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\n<p>\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<li>\n<p>\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437\u00a0\u043d\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u044b<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043a\u0430\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u00a0Kafka<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 <code>client_id<\/code> \u0432 <code>customer_id<\/code><\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u0435 <code>source<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>SpoolDirJsonSourceConnector<\/code>. \u042d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<\/p>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/h4>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d \u0432\u00a0Docker:<\/p>\n<pre><code class=\"bash\">FROM confluentinc\/cp-kafka-connect:8.3.1RUN confluent-hub install \\    --no-prompt \\    jcustenborder\/kafka-connect-spooldir:latest<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"bash\">curl http:\/\/localhost:8083\/connector-plugins<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u043e\u0442\u0432\u0435\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441: <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/681\/d0c\/16d\/681d0c16d5385b4ab8280ed76d894ecc.png\" width=\"1468\" height=\"180\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/681\/d0c\/16d\/681d0c16d5385b4ab8280ed76d894ecc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/681\/d0c\/16d\/681d0c16d5385b4ab8280ed76d894ecc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<pre><code class=\"bash\">mkdir -p data\/inputmkdir -p data\/finishedmkdir -p data\/error<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ul>\n<li>\n<p><code>input<\/code>\u00a0\u2014 \u0441\u044e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<li>\n<p><code>finished<\/code>\u00a0\u2014 \u0441\u044e\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<\/li>\n<li>\n<p><code>error<\/code>\u00a0\u2014 \u0441\u044e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 Kafka Connect \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 Docker, \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440:<\/p>\n<pre><code class=\"bash\">volumes:  - .\/data\/input:\/data\/input  - .\/data\/finished:\/data\/finished  - .\/data\/error:\/data\/error<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0441\u00a0\u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438<\/h4>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>data\/input<\/code> \u0444\u0430\u0439\u043b <code>orders-001.json<\/code>:<\/p>\n<pre><code class=\"bash\">{\"order_id\":1001,\"client_id\":42,\"amount\":1290}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a<\/h4>\n<pre><code class=\"bash\">kafka-topics.sh \\  --bootstrap-server localhost:9092 \\  --create \\  --topic partner-orders \\  --partitions 1 \\  --replication-factor 1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Source Connector<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c connector \u0447\u0435\u0440\u0435\u0437 REST API:<\/p>\n<pre><code class=\"bash\">curl -X POST http:\/\/localhost:8083\/connectors \\  -H 'Content-Type: application\/json' \\  -d '{    \"name\": \"partner-orders-source-v2\",    \"config\": {      \"connector.class\": \"com.github.jcustenborder.kafka.connect.spooldir.SpoolDirJsonSourceConnector\",      \"tasks.max\": \"1\",      \"input.path\": \"\/data\/input\",      \"finished.path\": \"\/data\/finished\",      \"error.path\": \"\/data\/error\",      \"input.file.pattern\": \"orders-.*\\\\.json\",      \"cleanup.policy\": \"MOVE\",      \"halt.on.error\": \"true\",      \"topic\": \"partner-orders\",      \"key.schema\": \"{\\\"name\\\":\\\"partner.order.Key\\\",\\\"type\\\":\\\"STRUCT\\\",\\\"isOptional\\\":false,\\\"fieldSchemas\\\":{\\\"order_id\\\":{\\\"type\\\":\\\"INT64\\\",\\\"isOptional\\\":false}}}\",      \"value.schema\": \"{\\\"name\\\":\\\"partner.order.Value\\\",\\\"type\\\":\\\"STRUCT\\\",\\\"isOptional\\\":false,\\\"fieldSchemas\\\":{\\\"order_id\\\":{\\\"type\\\":\\\"INT64\\\",\\\"isOptional\\\":false},\\\"client_id\\\":{\\\"type\\\":\\\"INT64\\\",\\\"isOptional\\\":false},\\\"amount\\\":{\\\"type\\\":\\\"INT64\\\",\\\"isOptional\\\":false}}}\",      \"value.converter\": \"org.apache.kafka.connect.json.JsonConverter\",      \"value.converter.schemas.enable\": \"false\",      \"transforms\": \"RenameClientId,AddSource\",      \"transforms.RenameClientId.type\": \"org.apache.kafka.connect.transforms.ReplaceField$Value\",      \"transforms.RenameClientId.renames\": \"client_id:customer_id\",      \"transforms.AddSource.type\": \"org.apache.kafka.connect.transforms.InsertField$Value\",      \"transforms.AddSource.static.field\": \"source\",      \"transforms.AddSource.static.value\": \"partner-file\"    }  }'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<p><code>input.file.pattern<\/code> \u0437\u0430\u0434\u0430\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0438\u043c\u0435\u043d \u0444\u0430\u0439\u043b\u043e\u0432. \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 connector \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u0440\u043e\u0434\u0435:<\/p>\n<pre><code class=\"bash\">orders-001.jsonorders-002.jsonorders-2026-09-03.json<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <code>cleanup.policy=MOVE<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u0444\u0430\u0439\u043b \u0438\u0437 <code>input<\/code> \u0432 <code>finished<\/code>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u0444\u0430\u0439\u043b \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u0432\u0435 SMT:<\/p>\n<pre><code class=\"bash\">transforms=RenameClientId,AddSource<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435:<\/p>\n<pre><code class=\"bash\">transforms.RenameClientId.renames=client_id:customer_id<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435:<\/p>\n<pre><code class=\"bash\">transforms.AddSource.static.field=sourcetransforms.AddSource.static.value=partner-file<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>SMT \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 <code>transforms<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 Kafka Connect \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u0442 \u043f\u043e\u043b\u0435, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h4>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 connector&#8217;\u0430:<\/p>\n<pre><code class=\"bash\">curl http:\/\/localhost:8083\/connectors\/partner-orders-source\/status<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ed7\/827\/e84\/ed7827e844eaf5b53058b6039cd56284.png\" width=\"1010\" height=\"618\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ed7\/827\/e84\/ed7827e844eaf5b53058b6039cd56284.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ed7\/827\/e84\/ed7827e844eaf5b53058b6039cd56284.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0442\u043e\u043f\u0438\u043a\u0430:<\/p>\n<pre><code class=\"bash\">kafka-console-consumer.sh \\  --bootstrap-server localhost:9092 \\  --topic partner-orders \\  --from-beginning<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0442\u043e\u043f\u0438\u043a\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"bash\">{\"order_id\":1001,\"customer_id\":42,\"amount\":1290,\"source\":\"partner-file\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043f\u043e\u043b\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c <code>client_id<\/code>, \u0430\u00a0\u043f\u043e\u043b\u044f <code>source<\/code> \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e. \u041f\u0440\u043e\u0434\u044e\u0441\u0435\u0440 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043c\u044b \u043d\u0435\u00a0\u043f\u0438\u0441\u0430\u043b\u0438: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0441\u0430\u043c Kafka Connect \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e SMT.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b <code>orders-001.json<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d \u0438\u0437 <code>data\/input<\/code> \u0432 <code>data\/finished<\/code>.<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/kafka.apache.org\/43\/kafka-connect\/overview\/\" rel=\"noopener nofollow\">Kafka Connect Overview<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kafka.apache.org\/43\/kafka-connect\/user-guide\/\" rel=\"noopener nofollow\">Kafka Connect User Guide<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/kafka.apache.org\/43\/configuration\/kafka-connect-configs\/\" rel=\"noopener nofollow\">Kafka Connect Configuration<\/a><\/p>\n<\/li>\n<\/ul>\n<h3>Tg \u043a\u0430\u043d\u0430\u043b, \u0433\u0434\u0435 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u044b<\/h3>\n<p><a href=\"https:\/\/t.me\/letsgolanging\" rel=\"noopener nofollow\">Telegram<\/a><\/p>\n<\/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\/articles\/1078340\/\">https:\/\/habr.com\/ru\/articles\/1078340\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0431\u043e\u0439\u0446\u044b, \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445? \u0415\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0PostgreSQL \u0432\u00a0Kafka. \u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c: \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441.\u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c SELECT, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 Kafka Producer. \u041d\u0430\u00a0\u0441\u0445\u0435\u043c\u0435 \u0432\u0441\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e:\u041d\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b:\u043a\u0430\u043a\u00a0\u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b?\u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0447\u0442\u0435\u043d\u0438\u044f?\u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430?\u041e\u0449\u0443\u0449\u0430\u0435\u0442\u0435 \u0447\u0435\u043c \u043f\u043e\u043f\u0430\u0445\u0438\u0432\u0430\u0435\u0442? \u0412\u043c\u0435\u0441\u0442\u043e \u00ab\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441. \u0415\u0433\u043e \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c.Kafka Connect \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0438\u0437\u00a0\u043a\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442, \u043a\u0430\u043a\u00a0\u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u00a0\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0432\u043e\u0440\u043a\u0435\u0440\u0430 (worker) \u0438 \u0433\u0434\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.PS. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430\u00a0tg \u043a\u0430\u043d\u0430\u043b \u0441\u00a0\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0439\u00a0\u2014 Telegram:)\u0427\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 Kafka ConnectKafka Connect \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 Apache Kafka \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f\u00a0\u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 Kafka \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438.\u0423\u00a0\u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b:\u0417\u0430 \u00ab\u0442\u043e \u0438 \u043e\u0442\u043a\u0443\u0434\u0430\u00bb \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430:Source Connector \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0438\u0448\u0435\u0442 \u0438\u0445 \u0432\u00a0KafkaSink Connector \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u00a0Kafka \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432\u043e\u00a0\u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443Kafka Connect \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u00a0\u0447\u0438\u0442\u0430\u0442\u044c PostgreSQL \u0438\u043b\u0438\u00a0\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u00a0S3. \u042d\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b. \u0410\u00a0Connect \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 offsets, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0434\u0430\u0447 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f REST API.Worker, Connector \u0438 Task\u0412 Kafka Connect \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0440\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438WorkerWorker \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Kafka Connect. \u0417\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c: \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u00a0REST API, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u00a0Kafka.ConnectorConnector \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e.\u0412\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u00a0\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443, \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0440\u0435\u0436\u0438\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. Connector \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c.TaskTask \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0440\u0430\u0431\u043e\u0442\u044b. \u0418\u043c\u0435\u043d\u043d\u043e task \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438\u043b\u0438\u00a0\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432\u00a0\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a.\u041e\u0434\u0438\u043d connector \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e tasks. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e Kafka Connect \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 worker&#8217;\u0430\u043c\u0438.\u0412\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: tasks.max: \u0447\u0438\u0441\u043b\u043e. \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00ab\u0441\u043e\u0437\u0434\u0430\u0439 \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\u00bb, \u0430\u00a0\u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430. \u041f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 tasks, \u0435\u0441\u043b\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c.\u041e\u0442\u043a\u0443\u0434\u0430 Connect \u0437\u043d\u0430\u0435\u0442, \u043d\u0430\u00a0\u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f\u041e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0438\u0434\u0435\u0439 Kafka Connect \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430\u00a0\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0430\u043c\u043e\u0439 Kafka.\u0412\u00a0Kafka \u0442\u043e\u043f\u0438\u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430\u00a0\u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u0430\u00a0\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f offset&#8217;\u043e\u043c.Kafka Connect \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u0430\u043a\u00a0\u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c source partitions. \u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f, source offset.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u00a0PostgreSQL users \u0441\u00a0\u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c id. \u0422\u043e\u0433\u0434\u0430 \u0432 source offset \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f id \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430\u00a0\u0432 source partition \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c users. \u0415\u0441\u043b\u0438 task \u0443\u043f\u0430\u043b, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439:SELECT * FROM users  WHERE id &gt; 10ORDER BY id\u0424\u043e\u0440\u043c\u0430\u0442 source partition \u0438 source offset \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d.\u0423 sink connector&#8217;\u043e\u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f. \u041e\u043d\u0438 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 Kafka partitions \u043a\u0430\u043a\u00a0consumer \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Kafka offsets \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b.Standalone \u0438 Distributed ModeKafka Connect \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u00a0\u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445.Standalone Mode\u0412 standalone\u2011\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0422\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0447\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. Source offsets \u0432\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.Distributed Mode\u0412\u00a0distributed\u2011\u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e worker&#8217;\u043e\u0432 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c, \u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, group.id \u0438 \u0438\u043c\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0442\u043e\u043f\u0438\u043a\u043e\u0432.\u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e worker \u043f\u0430\u0434\u0430\u0435\u0442, \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0443\u0442 \u043d\u0430\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u041f\u0440\u0438\u00a0\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e worker&#8217;\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b.\u0412\u00a0\u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 Kafka Connect \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u00a0\u0441\u0430\u043c\u043e\u0439 Kafka. \u0412\u00a0\u0442\u043e\u043f\u0438\u043a\u0430\u0445: connect-configs\u00a0\u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 connector&#8217;\u043e\u0432 \u0438 tasksconnect-offsets\u00a0\u2014 offsets source connector&#8217;\u043e\u0432connect-statuses\u00a0\u2014 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f connector&#8217;\u043e\u0432 \u0438 tasks\u0427\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u00a0\u043e\u0448\u0438\u0431\u043a\u0430\u0445\u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Connect \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f fail\u2011fast \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u00a0\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 SMT \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c task.\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: errors.tolerance=all\u041d\u043e\u00a0\u0441\u0430\u043c\u0430 \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u044d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043f\u0430\u0441\u043d\u0430. Pipeline \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u043c, \u0445\u043e\u0442\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u0430.\u041a\u0430\u043a\u00a0\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: errors.log.enable=true \u0438 errors.log.include.messages=falseSMT: \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0434\u043e\u0440\u043e\u0433\u0435\u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0Kafka \u0438\u043b\u0438\u00a0\u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443:\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u0435\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u00a0Kafka Connect \u0435\u0441\u0442\u044c Single Message Transformations \u0438\u043b\u0438 SMT. \u041e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 REST APIKafka Connect \u0437\u0430\u0434\u0443\u043c\u0430\u043d \u043a\u0430\u043a\u00a0\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 HTTP.\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b:GET    \/connector-pluginsGET    \/connectorsPOST   \/connectorsGET    \/connectors\/{name}GET    \/connectors\/{name}\/statusPUT    \/connectors\/{name}\/configPUT    \/connectors\/{name}\/pausePUT    \/connectors\/{name}\/resumePUT    \/connectors\/{name}\/stopPOST   \/connectors\/{name}\/restart?includeTasks=true&amp;onlyFailed=trueDELETE \/connectors\/{name}\u0412\u00a0\u0446\u0435\u043b\u043e\u043c, \u0442\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u044b\u0439 API.\u041a\u043e\u0433\u0434\u0430 Kafka Connect \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0430\u00a0\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442Kafka Connect \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 KafkaKafka\u00a0\u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435Kafka\u00a0\u2014 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441Kafka\u00a0\u2014 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0430\u0437\u0430\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f\u00a0\u043e\u0431\u0435\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0437\u0440\u0435\u043b\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 connector. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0437\u0443\u043c\u043d\u0435\u0435, \u0435\u0441\u043b\u0438:\u0432\u043d\u0443\u0442\u0440\u0438 pipeline \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438\u043d\u0443\u0436\u043d\u044b join, \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438, \u043e\u043a\u043d\u0430 \u0438\u043b\u0438\u00a0\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439, \u0430\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0435\u0442\u041d\u043e\u00a0\u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 connector.\u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u0435\u0440\u0435\u043d\u043e\u0441 JSON\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0Kafka\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437\u00a0\u043d\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u044b\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043a\u0430\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u00a0Kafka\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 client_id \u0432 customer_id\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u0435 source\u0414\u043b\u044f\u00a0\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SpoolDirJsonSourceConnector. \u042d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430\u00a0\u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d \u0432\u00a0Docker:FROM confluentinc\/cp-kafka-connect:8.3.1RUN confluent-hub install \\    &#8212;no-prompt \\    jcustenborder\/kafka-connect-spooldir:latest\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c:curl http:\/\/localhost:8083\/connector-plugins\u0412\u00a0\u043e\u0442\u0432\u0435\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441: \u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:mkdir -p data\/inputmkdir -p data\/finishedmkdir -p data\/errorinput\u00a0\u2014 \u0441\u044e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044bfinished\u00a0\u2014 \u0441\u044e\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044berror\u00a0\u2014 \u0441\u044e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u0415\u0441\u043b\u0438 Kafka Connect \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 Docker, \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440:volumes:  &#8212; .\/data\/input:\/data\/input  &#8212; .\/data\/finished:\/data\/finished  &#8212; .\/data\/error:\/data\/error\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0441\u00a0\u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 data\/input \u0444\u0430\u0439\u043b orders-001.json:{&#171;order_id&#187;:1001,&#187;client_id&#187;:42,&#187;amount&#187;:1290}\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043akafka-topics.sh \\  &#8212;bootstrap-server localhost:9092 \\  &#8212;create \\  &#8212;topic partner-orders \\  &#8212;partitions 1 \\  &#8212;replication-factor 1\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Source Connector\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c connector \u0447\u0435\u0440\u0435\u0437 REST API:curl -X POST http:\/\/localhost:8083\/connectors \\  -H &#8216;Content-Type: application\/json&#8217; \\  -d &#8216;{    &#171;name&#187;: &#171;partner-orders-source-v2&#187;,    &#171;config&#187;: {      &#171;connector.class&#187;: &#171;com.github.jcustenborder.kafka.connect.spooldir.SpoolDirJsonSourceConnector&#187;,      &#171;tasks.max&#187;: &#171;1&#187;,      &#171;input.path&#187;: &#171;\/data\/input&#187;,      &#171;finished.path&#187;: &#171;\/data\/finished&#187;,      &#171;error.path&#187;: &#171;\/data\/error&#187;,      &#171;input.file.pattern&#187;: &#171;orders-.*\\\\.json&#187;,      &#171;cleanup.policy&#187;: &#171;MOVE&#187;,      &#171;halt.on.error&#187;: &#171;true&#187;,      &#171;topic&#187;: &#171;partner-orders&#187;,      &#171;key.schema&#187;: &#171;{\\&#187;name\\&#187;:\\&#187;partner.order.Key\\&#187;,\\&#187;type\\&#187;:\\&#187;STRUCT\\&#187;,\\&#187;isOptional\\&#187;:false,\\&#187;fieldSchemas\\&#187;:{\\&#187;order_id\\&#187;:{\\&#187;type\\&#187;:\\&#187;INT64\\&#187;,\\&#187;isOptional\\&#187;:false}}}&#187;,      &#171;value.schema&#187;: &#171;{\\&#187;name\\&#187;:\\&#187;partner.order.Value\\&#187;,\\&#187;type\\&#187;:\\&#187;STRUCT\\&#187;,\\&#187;isOptional\\&#187;:false,\\&#187;fieldSchemas\\&#187;:{\\&#187;order_id\\&#187;:{\\&#187;type\\&#187;:\\&#187;INT64\\&#187;,\\&#187;isOptional\\&#187;:false},\\&#187;client_id\\&#187;:{\\&#187;type\\&#187;:\\&#187;INT64\\&#187;,\\&#187;isOptional\\&#187;:false},\\&#187;amount\\&#187;:{\\&#187;type\\&#187;:\\&#187;INT64\\&#187;,\\&#187;isOptional\\&#187;:false}}}&#187;,      &#171;value.converter&#187;: &#171;org.apache.kafka.connect.json.JsonConverter&#187;,      &#171;value.converter.schemas.enable&#187;: &#171;false&#187;,      &#171;transforms&#187;: &#171;RenameClientId,AddSource&#187;,      &#171;transforms.RenameClientId.type&#187;: &#171;org.apache.kafka.connect.transforms.ReplaceField$Value&#187;,      &#171;transforms.RenameClientId.renames&#187;: &#171;client_id:customer_id&#187;,      &#171;transforms.AddSource.type&#187;: &#171;org.apache.kafka.connect.transforms.InsertField$Value&#187;,      &#171;transforms.AddSource.static.field&#187;: &#171;source&#187;,      &#171;transforms.AddSource.static.value&#187;: &#171;partner-file&#187;    }  }&#8217;\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.input.file.pattern \u0437\u0430\u0434\u0430\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0438\u043c\u0435\u043d \u0444\u0430\u0439\u043b\u043e\u0432. \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 connector \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0432\u0440\u043e\u0434\u0435:orders-001.jsonorders-002.jsonorders-2026-09-03.json\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 cleanup.policy=MOVE \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u0444\u0430\u0439\u043b \u0438\u0437 input \u0432 finished. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442\u00a0\u0436\u0435 \u0444\u0430\u0439\u043b \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u0432\u0435 SMT:transforms=RenameClientId,AddSource\u041f\u0435\u0440\u0432\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435:transforms.RenameClientId.renames=client_id:customer_id\u0412\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435:transforms.AddSource.static.field=sourcetransforms.AddSource.static.value=partner-fileSMT \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0\u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 transforms. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 Kafka Connect \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u0442 \u043f\u043e\u043b\u0435, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 connector&#8217;\u0430:curl http:\/\/localhost:8083\/connectors\/partner-orders-source\/status\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0442\u043e\u043f\u0438\u043a\u0430:kafka-console-consumer.sh \\  &#8212;bootstrap-server localhost:9092 \\  &#8212;topic partner-orders \\  &#8212;from-beginning\u0412\u00a0\u0442\u043e\u043f\u0438\u043a\u0435 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-493415","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493415","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=493415"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493415\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}