{"id":359944,"date":"2024-05-21T00:43:02","date_gmt":"2024-05-21T00:43:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=359944"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T00:43:02","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=359944","title":{"rendered":"<span>\u041f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a Kafka tiered storage<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0418\u0422-\u043d\u0438\u043a\u0438.  \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u041c\u0438\u0445\u0430\u0438\u043b \u0413\u043e\u043b\u043e\u0432\u0430\u043d\u043e\u0432. <s>\u0412 \u044d\u0442\u043e\u043c \u0441\u0435\u0437\u043e\u043d\u0435 \u043d\u0430\u0448\u0435\u0433\u043e Kafka<\/s> <s>\u0448\u043e\u0443<\/s> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u0432 Apache Kafka. \u0422\u0435\u043e\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439.<\/p>\n<h2>Tiered storage \u0432 \u041a\u0430\u0444\u043a\u0430<\/h2>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 tiered storage \u0438 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u041a\u0430\u0444\u043a\u0435<\/h3>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430. \u041f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c &#171;\u0433\u043e\u0440\u044f\u0447\u0435\u043c&#187; \u0441\u043b\u043e\u0435 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044f\u0441\u044c \u0432 \u0441\u043b\u043e\u0439 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445&#187; \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0439 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442, \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043d,\u0447\u0435\u043c &#171;\u0433\u043e\u0440\u044f\u0447\u0438\u0439&#187; \u0441\u043b\u043e\u0439, \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u043b\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438,\u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>\u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 3.6 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a \u0445\u043e\u0441\u0442\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0441\u0432\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432. \u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u0438 3.6 Apache Kafka \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Early Access \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f tiered storage. <\/p>\n<p><strong><em>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f tiered storage \u0432 Apache Kafka 3.6 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/em><\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f tiered storage \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 Confluent Kafka Enterprise  (\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430) \u0435\u0449\u0435 \u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e \u0432\u044b\u0445\u043e\u0434\u0430 Apache Kafka 3.6.\u0422\u0430\u043a\u0436\u0435 \u0438 \u0434\u043b\u044f <a href=\"https:\/\/docs.redpanda.com\/current\/manage\/tiered-storage\/\" rel=\"noopener noreferrer nofollow\">Redpanda<\/a> \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0435&#187; \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 tiered storage. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 tiered storage \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 tiered storage \u043c\u043e\u0436\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f S3 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/06e\/2ee\/c1f\/06e2eec1f8390a23cf34092e486f16ff.png\" alt=\"\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 Kafka \u0441 tiered storage\" title=\"\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 Kafka \u0441 tiered storage\" width=\"300\" height=\"175\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06e\/2ee\/c1f\/06e2eec1f8390a23cf34092e486f16ff.png\"\/><\/p>\n<div><figcaption>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 Kafka \u0441 tiered storage<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043b\u0438\u0434\u0435\u0440\u043e\u043c \u0438\u043b\u0438 \u0444\u043e\u043b\u043b\u043e\u0432\u0435\u0440\u043e\u043c \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438 \u043d\u0430 \u043d\u0435\u043c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438.\u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 &#171;\u043f\u0440\u043e\u043b\u0438\u0432\u043a\u0438&#187; \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\u043c \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445.\u041d\u0430\u043b\u0438\u0447\u0438\u0435 tiered storage \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u0443 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440\u0430-\u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 tiered storage \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442: <\/p>\n<ul>\n<li>\n<p>\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d\u043b\u0430\u0439\u043d \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 &#171;batch&#187; \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kafka \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 Kafka, \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c):<\/p>\n<ul>\n<li>\n<p>Tiered storage: \u041c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435. \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0435\u0432.<\/p>\n<\/li>\n<li>\n<p>Kafka: \u0411\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"https:\/\/kafka.apache.org\" rel=\"noopener noreferrer nofollow\">Apache Kafka<\/a><\/p>\n<\/li>\n<li>\n<p>Topic (\u0422\u043e\u043f\u0438\u043a): \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 (partition).<\/p>\n<\/li>\n<li>\n<p>Partition (\u0440\u0430\u0437\u0434\u0435\u043b): \u0422\u043e\u043f\u0438\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432, \u0442.\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0434\u0435\u043b. \u0420\u0430\u0437\u0434\u0435\u043b\u044b \u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.\u0420\u0430\u0437\u0434\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430.\u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0440\u043e\u043a\u0435\u0440\u0430\u043c\u0438 Kafka.<\/p>\n<\/li>\n<li>\n<p>Segment (\u0441\u0435\u0433\u043c\u0435\u043d\u0442): \u0427\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\/\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>Index (\u0438\u043d\u0434\u0435\u043a\u0441): \u0424\u0430\u0439\u043b \u0438\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>Message offset (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f): \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043b\u043e\u0433\u0430 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438). \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (message offset). \u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>Start topic partition offset (\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0442\u043e\u043f\u0438\u043a\u0430): \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>End topic partition offset (\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0442\u043e\u043f\u0438\u043a\u0430): \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. <\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b tiered storage<\/h2>\n<h3>\u0426\u0435\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 Apache Kafka \u0432\u0435\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-405%3A+Kafka+Tiered+Storage\" rel=\"noopener noreferrer nofollow\">KIP-405<\/a>. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0437\u0430\u0434\u0430\u0447\u0438 <a href=\"https:\/\/issues.apache.org\/jira\/browse\/KAFKA-15420\" rel=\"noopener noreferrer nofollow\">KAFKA-15420<\/a>.<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Goals<\/strong><\/p>\n<p>Extend Kafka&#8217;s storage beyond the local storage available on the  Kafka cluster by retaining the older data in an external store,  such as HDFS or S3 with minimal impact on the internals of Kafka.  Kafka behavior and operational complexity must not change  for existing users that do not have tiered storage feature  configured.<\/p>\n<\/blockquote>\n<p>\u0426\u0435\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Kafka  \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432  \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0442\u0430\u043a\u043e\u0435 \u043a\u0430\u043a HDFS \u0438\u043b\u0438 S3 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u0435\u043c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e  Kafka.  \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Kafka \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0445\u0443\u0434\u0448\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0435  \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u0412\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5c4\/a18\/ae2\/5c4a18ae27614206f4de5e908b094075.png\" alt=\"\u0414\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b remote storage\" title=\"\u0414\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b remote storage\" width=\"1219\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c4\/a18\/ae2\/5c4a18ae27614206f4de5e908b094075.png\"\/><\/p>\n<div><figcaption>\u0414\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b remote storage<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>Remote Log Manager (RLM)<\/p>\n<\/li>\n<li>\n<p>Remote Log Metadata Manager (RSM)<\/p>\n<\/li>\n<li>\n<p>Remote Storage Manager<\/p>\n<\/li>\n<\/ul>\n<p><em>Remote Log Manager<\/em> \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432 Kafka Log Manager<\/p>\n<ul>\n<li>\n<p>\u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u043d\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0435, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e Log Manager) <\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (remote storage) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>RemoteStorageManager<\/em><\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 <em>RemoteLogMetadataManager<\/em>-\u0443.<\/p>\n<\/li>\n<\/ul>\n<p><em>RemoteLogManager<\/em> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API.<\/p>\n<p><em>Remote Storage Manager<\/em> <strong><em>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em><\/strong> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 **\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432** \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Apache Kafka \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RSM \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f API. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HDFS \u0438 S3 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f \u043a\u043e\u0434\u0430 Kafka, \u0442.\u0435 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f\u0445. \u041f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u043b\u044f Kafka connectors.<\/p>\n<p><em>RemoteLogMetadataManager<\/em> <strong><em>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em><\/strong> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 <strong><em>\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445<\/em><\/strong> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u043e\u043f\u0438\u043a. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 Apache Kafka 3.6 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Log Manager \u0438 RemoteLogMetadataManager. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.6 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445&#187; \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0422\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0430 \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0439 \u0441\u0438\u043b\u0435 opensource.<\/p>\n<p>\u041d\u0430 Github \u0438\u043c\u0435\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/linkedin\/kafka-remote-storage-azure\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f Azure Blob Storage<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/github.com\/Aiven-Open\/tiered-storage-for-apache-kafka\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 Avien Open<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u0434\u043b\u044f \u043d\u0435\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 S3 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 Google Cloud, AWS \u0438 Minio, \u0430 \u0442\u0430\u043a\u0436\u0435 Azure Blob Storage.<\/p>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Avien Open \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 Minio, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435) \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage.<\/p>\n<h2>\u041f\u043e\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u0434<\/h2>\n<h3>\u041f\u0440\u0435\u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b<\/h3>\n<p>\u041f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043c\u0435\u043b\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u043c \u043d\u0430 Manjaro Linux, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Linux. \u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Apache Kafka \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>Remote Storage Manager<\/em> \u043e\u0442 Avien Open \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442.<\/p>\n<h3>\u0428\u0430\u0433 1. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043e\u0434\u043d\u043e\u0443\u0437\u043b\u043e\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430<\/h3>\n<p>1. \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Kafka 3.6.0 \u0434\u043b\u044f Linux \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/downloads.apache.org\/kafka\/3.6.0\/kafka_2.13-3.6.0.tgz\" rel=\"noopener noreferrer nofollow\">Apache Kafka<\/a>.<\/p>\n<p>2. \u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432. \u041f\u0430\u043f\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>tar xvzf kafka_2.13-3.6.0.tgz<\/code><\/p>\n<p>3. \u0412 \u043f\u0430\u043f\u043a\u0435 kafka_2.13-3.6.0 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Zookeeper, Kafka \u0438 remote storage<br \/><code>mkdir -p .\/data\/zk<br \/>mkdir -p .\/data\/kafka<br \/>mkdir -p .\/data\/fs_storage<\/code><\/p>\n<p>4. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c zookeeper. <br \/>\u0412 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 .\/config \u0432 \u0444\u0430\u0439\u043b\u0435 <em>zookeeper.properties<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 <br \/><code>dataDir=.\/data\/zk<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b .\/config\/zookeeper.properties<\/summary>\n<div class=\"spoiler__content\">\n<p># Licensed to the Apache Software Foundation (ASF) under one or more <br \/># contributor license agreements.  See the NOTICE file distributed with <br \/># this work for additional information regarding copyright ownership. <br \/># The ASF licenses this file to You under the Apache License, Version 2.0 <br \/># (the &#171;License&#187;); you may not use this file except in compliance with <br \/># the License.  You may obtain a copy of the License at <br \/>#  <br \/>#    http:\/\/www.apache.org\/licenses\/LICENSE-2.0 <br \/>#  <br \/># Unless required by applicable law or agreed to in writing, software <br \/># distributed under the License is distributed on an &#171;AS IS&#187; BASIS, <br \/># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br \/># See the License for the specific language governing permissions and <br \/># limitations under the License. <br \/># the directory where the snapshot is stored. <br \/>dataDir=.\/data\/zk <\/p>\n<p># the port at which the clients will connect <br \/>clientPort=2181 <\/p>\n<p># disable the per-ip limit on the number of connections since this is a non-production config <br \/>maxClientCnxns=0 <\/p>\n<p># Disable the adminserver by default to avoid port conflicts. <br \/># Set the port to something non-conflicting if choosing to enable this admin.enableServer=false <br \/># admin.serverPort=8080 <\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c zookeeper \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0438\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kafka<br \/><code>.\/bin\/zookeeper-server-start.sh -daemon .\/config\/zookeeper.properties<\/code><\/p>\n<p>5. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Kafka.<br \/>\u0412 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 .\/config \u0432 \u0444\u0430\u0439\u043b\u0435 <em>server.properties<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432<br \/><code>log.dirs=.\/data\/kafka<\/code><\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Kafka \u0431\u0440\u043e\u043a\u0435\u0440<br \/><code>.\/bin\/kafka-server-start.sh -daemon .\/config\/server.properties<\/code><\/p>\n<p>6. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043f\u0438\u043a\u043e\u0432<br \/><code>.\/bin\/kafka-topics.sh --bootstrap-server localhost:9092 --list<\/code><\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043f\u0438\u043a\u043e\u0432.<\/p>\n<h3>\u0428\u0430\u04332. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager Aiven Open \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439<\/h3>\n<ol>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c git repo <a href=\"https:\/\/github.com\/Aiven-Open\/tiered-storage-for-apache-kafka\" rel=\"noopener noreferrer nofollow\">Aiven-Open\/tiered-storage-for-apache-kafka<\/a><br \/><code>git clone https:\/\/github.com\/Aiven-Open\/tiered-storage-for-apache-kafka<\/code><\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434<br \/><code>.\/gradlew build<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0442\u0443\u0442 \u043c\u0435\u043d\u044f \u0436\u0434\u0430\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. <\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 &#8212; \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 Linux \u0445\u043e\u0441\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 Docker. \u0420\u0435\u0448\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u043b, \u043f\u043e\u0447\u0438\u0442\u0430\u043b, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b Docker, \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435. E2E (End-to-End) \u0442\u0435\u0441\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432 DockerHub \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 aivenoy&#8230;, \u0430 \u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435\u0442. \u0420\u0435\u0448\u0438\u043b \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c E2E \u0442\u0435\u0441\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 settings.gradle, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0442\u0440\u043e\u043a\u0443:<br \/><code>\/\/ include 'e2e'<\/code><\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u044b\u043b\u043e \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<h3>\u0428\u0430\u0433 3. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 Remote Storage Manager \u0432 Kafka.<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f RSM \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 build\/distributions \u0432 \u0432\u0438\u0434\u0435 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 tiered-storage-for-apache-kafka-0.0.1-SNAPSHOT.tgz \u0438 tiered-storage-for-apache-kafka-0.0.1-SNAPSHOT.zip.<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b tiered-storage-for-apache-kafka-0.0.1-SNAPSHOT.tgz \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0443 .\/libs \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 tiered storage \u0432 \u0431\u0440\u043e\u043a\u0435\u0440\u0435.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kafka<br \/><code>.\/bin\/kafka-server-stop.sh<\/code><\/p>\n<h3>\u0428\u0430\u0433 4. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 Kafka \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 tiered storage.<\/h3>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b .\/config\/server.properties \u0432 \u0431\u0440\u043e\u043a\u0435\u0440\u0435 Kafka.<\/p>\n<details class=\"spoiler\">\n<summary>Hidden text<\/summary>\n<div class=\"spoiler__content\">\n<p># Licensed to the Apache Software Foundation (ASF) under one or more <br \/># contributor license agreements.  See the NOTICE file distributed with <br \/># this work for additional information regarding copyright ownership. <br \/># The ASF licenses this file to You under the Apache License, Version 2.0 <br \/># (the &#171;License&#187;); you may not use this file except in compliance with <br \/># the License.  You may obtain a copy of the License at <br \/># <br \/>#    http:\/\/www.apache.org\/licenses\/LICENSE-2.0 <br \/># <br \/># Unless required by applicable law or agreed to in writing, software <br \/># distributed under the License is distributed on an &#171;AS IS&#187; BASIS, <br \/># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br \/># See the License for the specific language governing permissions and <br \/># limitations under the License.  <br \/># <br \/># This configuration file is intended for use in ZK-based mode, where Apache ZooKeeper is required. <br \/># See kafka.server.KafkaConfig for additional details and defaults <br \/>#  ############################# Server Basics #############################  <br \/># The id of the broker. This must be set to a unique integer for each broker. <br \/>broker.id=0  <br \/>############################# Socket Server Settings #############################  <br \/># The address the socket server listens on. If not configured, the host name will be equal to the value of <br \/># java.net.InetAddress.getCanonicalHostName(), with PLAINTEXT listener name, and port 9092. <br \/>#   FORMAT: <br \/>#     listeners = listener_name:\/\/host_name:port <br \/>#   EXAMPLE: <br \/>#     listeners = PLAINTEXT:\/\/your.host.name:9092 <br \/>#listeners=PLAINTEXT:\/\/:9092  <\/p>\n<p># Listener name, hostname and port the broker will advertise to clients. <br \/># If not set, it uses the value for &#171;listeners&#187;. <br \/>#advertised.listeners=PLAINTEXT:\/\/your.host.name:9092 <\/p>\n<p># Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details <br \/>#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL  <\/p>\n<p># The number of threads that the server uses for receiving requests from the network and sending responses to the network <br \/>num.network.threads=3  <\/p>\n<p># The number of threads that the server uses for processing requests, which may include disk I\/O <br \/>num.io.threads=8  <\/p>\n<p># The send buffer (SO_SNDBUF) used by the socket server <br \/>socket.send.buffer.bytes=102400<\/p>\n<p># The receive buffer (SO_RCVBUF) used by the socket server<br \/>socket.receive.buffer.bytes=102400  <\/p>\n<p># The maximum size of a request that the socket server will accept (protection against OOM) <br \/>socket.request.max.bytes=104857600   <br \/>############################# Log Basics #############################  <br \/># A comma separated list of directories under which to store log files <br \/># Changed line <br \/>log.dirs=.\/data\/kafka  <\/p>\n<p># The default number of log partitions per topic. More partitions allow greater <br \/># parallelism for consumption, but this will also result in more files across <br \/># the brokers. <br \/>num.partitions=1  <\/p>\n<p># The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. <br \/># This value is recommended to be increased for installations with data dirs located in RAID array. <br \/>num.recovery.threads.per.data.dir=1  <\/p>\n<p>############################# Internal Topic Settings  ############################# <br \/># The replication factor for the group metadata internal topics &#171;__consumer_offsets&#187; and &#171;__transaction_state&#187; <br \/># For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3. <br \/>offsets.topic.replication.factor=1 <br \/>transaction.state.log.replication.factor=1 <br \/>transaction.state.log.min.isr=1 <br \/># Changed block start<br \/> offsets.topic.num.partitions=1 <br \/># Changed block end  <\/p>\n<p># Disable auto create topics <br \/># Changed line <br \/>auto.create.topics.enable=false  <\/p>\n<p>############################# Log Flush Policy #############################  <br \/># Messages are immediately written to the filesystem but by default we only fsync() to sync <br \/># the OS cache lazily. The following configurations control the flush of data to disk. <br \/># There are a few important trade-offs here: <br \/>#    1. Durability: Unflushed data may be lost if you are not using replication. <br \/>#    2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. <br \/>#    3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks. <br \/># The settings below allow one to configure the flush policy to flush data after a period of time or <br \/># every N messages (or both). This can be done globally and overridden on a per-topic basis.  <\/p>\n<p># The number of messages to accept before forcing a flush of data to disk #log.flush.interval.messages=10000  <\/p>\n<p># The maximum amount of time a message can sit in a log before we force a flush #log.flush.interval.ms=1000  <\/p>\n<p>############################# Log Retention Policy #############################  <br \/># The following configurations control the disposal of log segments. The policy can <br \/># be set to delete segments after a period of time, or after a given size has accumulated. <br \/># A segment will be deleted whenever *either* of these criteria are met. Deletion always happens # from the end of the log.  <br \/># The minimum age of a log file to be eligible for deletion due to age <br \/>#Changed line <br \/>log.retention.hours=1    <\/p>\n<p># A size-based retention policy for logs. Segments are pruned from the log unless the remaining <br \/># segments drop below log.retention.bytes. Functions independently of log.retention.hours. <br \/>#log.retention.bytes=1073741824  <\/p>\n<p># The maximum size of a log segment file. When this size is reached a new log segment will be created. <br \/>#log.segment.bytes=20000 <br \/>#log.segment.delete.delay.ms=1000 <br \/>#log.index.size.max.bytes=200 <br \/>#log.roll.hours=1 <br \/>#log.roll.ms=10000  <\/p>\n<p># The interval at which log segments are checked to see if they can be deleted according <br \/># to the retention policies <br \/># Changed line <br \/>log.retention.check.interval.ms=10000  <\/p>\n<p>############################# Zookeeper #############################  <br \/># Zookeeper connection string (see zookeeper docs for details). <br \/># This is a comma separated host:port pairs, each corresponding to a zk <br \/># server. e.g. &#171;127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002&#187;. <br \/># You can also append an optional chroot string to the urls to specify the <br \/># root directory for all kafka znodes. <br \/>zookeeper.connect=localhost:2181  <br \/># Timeout in ms for connecting to zookeeper <br \/>zookeeper.connection.timeout.ms=18000   <\/p>\n<p>############################# Group Coordinator Settings #############################  <br \/># The following configuration specifies the time, in milliseconds, that the GroupCoordinator will delay the initial consumer rebalance. <br \/># The rebalance will be further delayed by the value of group.initial.rebalance.delay.ms as new members join the group, up to a maximum of max.poll.interval.ms. <br \/># The default value for this is 3 seconds. <br \/># We override this to 0 here as it makes for a better out-of-the-box experience for development and testing. <br \/># However, in production environments the default value of 3 seconds is more suitable as this will help to avoid unnecessary, and potentially expensive, rebalances during application startup. group.initial.rebalance.delay.ms=0  <\/p>\n<p># Changed block start <br \/>############################# Remote log Settings #############################  <br \/># Enable Tiered Storage <br \/>remote.log.storage.system.enable=true <br \/>remote.log.manager.task.interval.ms=5000  <\/p>\n<p># Remote metadata manager configs <br \/>remote.log.metadata.manager.class.name=org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager<br \/>remote.log.metadata.manager.impl.prefix=rlmm.config.<br \/>remote.log.metadata.manager.listener.name=PLAINTEXT<br \/>rlmm.config.remote.log.metadata.topic.replication.factor=1<br \/>rlmm.config.remote.log.metadata.topic.num.partitions=1  <\/p>\n<p># Remote storage manager configs <br \/>remote.log.storage.manager.class.name=io.aiven.kafka.tieredstorage.RemoteStorageManager <br \/>remote.log.storage.manager.impl.prefix=<br \/>rsm.config. rsm.config.chunk.size=100 <br \/>rsm.config.chunk.cache.class=io.aiven.kafka.tieredstorage.chunkmanager.cache.InMemoryChunkCache <br \/>rsm.config.chunk.cache.size=20000 <br \/>rsm.config.chunk.cache.retention.ms=1000 <br \/>rsm.config.custom.metadata.fields.include=REMOTE_SIZE  <\/p>\n<p># Storage backend configs <br \/>rsm.config.key.prefix=tiered-storage-demo\/ <br \/>rsm.config.storage.backend.class=io.aiven.kafka.tieredstorage.storage.filesystem.FileSystemStorage <br \/>rsm.config.storage.root=.\/data\/fs_storage <br \/># Changed block end<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043f\u043e `# Changed`<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Kafka.<\/p>\n<ol>\n<li>\n<p><em>offsets.topic.num.partitions=1<br \/><\/em>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0433\u0440\u0443\u043f\u043f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 (__offsets). \u041f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 data\/kafka \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439\u041d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a RSM.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f\u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c Kafka \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><em>auto.create.topics.enable=false<br \/><\/em>\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u0442\u043e\u043f\u0438\u043a\u0438 \u044f\u0432\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e  \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><em>log.retention.hours=1<\/em><br \/>\u0412\u0440\u0435\u043c\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u043e\u043f\u0438\u043a\u0430\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e. \u041d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a RSM.<\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u043e 168 \u0447\u0430\u0441\u043e\u0432. \u041f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438  \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 1 \u0447\u0430\u0441\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0425\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><em>log.retention.check.interval.ms=10000<\/em><br \/>\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0442\u043e\u043f\u0438\u043a\u043e\u0432.\u041d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a RSM.<\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b RSM \u0432 \u0445\u043e\u0434\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0430\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b tiered storage \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong>. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 tiered storage<br \/><code># Enable Tiered Storage <br \/>remote.log.storage.system.enable=true remote.log.manager.task.interval.ms=5000<\/p>\n<p><\/code>\u0412\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 tiered storage (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 RLM) \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 RLM \u0440\u0430\u0432\u043d\u044b\u043c 5 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u043c \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0432 \u0445\u043e\u0434\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Remote Log Metadata Manager<br \/><code># Remote metadata manager configs remote.log.metadata.manager.class.name=org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager remote.log.metadata.manager.impl.prefix=rlmm.config. remote.log.metadata.manager.listener.name=PLAINTEXT rlmm.config.remote.log.metadata.topic.replication.factor=1 rlmm.config.remote.log.metadata.topic.num.partitions=1<\/code> <code><br \/><\/code><strong>\u0412\u0430\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b tiered storage \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/strong><br \/><em>remote.log.metadata.manager.class.name<\/em> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RLMM \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u043e\u043f\u0438\u043a\u043e\u0432<br \/><em>remote.log.metadata.manager.impl.prefix<\/em> \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Log Metadata Manager<\/p>\n<p><strong>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f Remote Metadata Manager \u043d\u0430 \u0431\u0430\u0437\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430 Kafka \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong>:<br \/><em>rlmm.config.remote.log.metadata.topic.replication.factor<\/em> \u0444\u0430\u043a\u0442\u043e\u0440 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 Remote Metadata Manager<br \/><em>rlmm.config.remote.log.metadata.topic.num.partitions<\/em> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0430 Remote Metadata Manager<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Remote Storage Manager<br \/><code># Remote storage manager configs remote.log.storage.manager.class.name=io.aiven.kafka.tieredstorage.RemoteStorageManager remote.log.storage.manager.impl.prefix=rsm.config. rsm.config.chunk.size=100 rsm.config.chunk.cache.class=io.aiven.kafka.tieredstorage.chunkmanager.cache.InMemoryChunkCache rsm.config.chunk.cache.size=20000 rsm.config.chunk.cache.retention.ms=1000 rsm.config.custom.metadata.fields.include=REMOTE_SIZE  # Storage backend configs rsm.config.key.prefix=tiered-storage-demo\/ rsm.config.storage.backend.class=io.aiven.kafka.tieredstorage.storage.filesystem.FileSystemStorage rsm.config.storage.root=.\/data\/fs_storage<\/code><\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<code><br \/><\/code><em>remote.log.storage.manager.class.name<\/em> \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager <em>remote.log.storage.manager.impl.prefix=rsm.config.<\/em> \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager <br \/><em>rsm.config.storage.root<\/em> \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 tiered storage<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b RSM \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <br \/>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0432 \u0444\u0430\u0439\u043b .\/config\/log4j.properties \u0432 \u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438<br \/><code>#Tiered storage configs log4j.appender.tieredStorageAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.tieredStorageAppender.DatePattern='.'yyyy-MM-dd-HH log4j.appender.tieredStorageAppender.File=${kafka.logs.dir}\/tiered_storage.log log4j.appender.tieredStorageAppender.layout=org.apache.log4j.PatternLayout log4j.appender.tieredStorageAppender.layout.ConversionPattern=[%d] %p %m (%c)%n  log4j.logger.io.aiven.kafka.tieredstorage=DEBUG, tieredStorageAppender log4j.additivity.io.aiven.kafka.tieredstorage=false<\/code><\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0431\u0440\u043e\u043a\u0435\u0440 Kafka<br \/><code>.\/bin\/kafka-server-start.sh -daemon .\/config\/server.properties<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u043b\u043e\u0433\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0440\u043e\u043a\u0435\u0440\u0430 <em>.\/logs\/server.log<\/em> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0443\u0440\u043e\u0432\u043d\u044f ERROR \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c <em>&#8216;[KafkaServer id=0] started (kafka.server.KafkaServer)&#8217;<\/em><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e RLMM \u0441\u043e\u0437\u0434\u0430\u043b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u043e\u043f\u0438\u043a<br \/><code>.\/bin\/kafka-topics.sh --bootstrap-server localhost:9092 --list__remote_log_metadata<\/code><br \/>\u041f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u043e\u043f\u0438\u043a __remote_log_metadata.<br \/>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u043e\u043f\u0438\u043a\u0430.<br \/><code>.\/bin\/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic __remote_log_metadataTopic: __remote_log_metadata    <br \/>TopicId: 9vsdpBeVT2qjo39a49JPTw    PartitionCount: 1  <br \/>ReplicationFactor: 1   Configs: cleanup.policy=delete,retention.ms=-1<br \/>Topic: __remote_log_metadata    Partition: 0   Leader: 0  Replicas: 0    Isr: 0<\/code><\/p>\n<\/li>\n<\/ol>\n<h3>\u0428\u0430\u0433 5. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p><code>.\/bin\/kafka-topics.sh --create --topic tieredTopic --bootstrap-server localhost:9092 \\<br \/>--config remote.storage.enable=true \\<br \/>--config local.retention.ms=1000 \\<br \/>--config retention.ms=300000 \\<br \/>--config segment.bytes=200<br \/>Created topic tieredTopic.<\/p>\n<p><\/code>\u041f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u043e\u043f\u0438\u043a tieredTopic.<\/p>\n<p>* \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 remote.storage.enable=true \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u043f\u0438\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e  \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 tiered storage. <br \/>* \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 local.retention.ms=1000 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u041a\u0430\u0444\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c &#171;\u0433\u043e\u0440\u044f\u0447\u0438\u0435&#187; \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u043e\u0441\u043b\u0435 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435&#187;. <br \/>* \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 retention.ms=300000 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 300 \u0441\u0435\u043a\u0443\u043d\u0434 (5 \u043c\u0438\u043d\u0443\u0442) <br \/>* \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 config segment.bytes=200 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 200 \u0431\u0430\u0439\u0442. \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u041d\u043e \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u0443\u044e \u0440\u043e\u0442\u0430\u0446\u0438\u044e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u043e\u043f\u0438\u043a. <\/p>\n<h3>\u0428\u0430\u0433 6. \u041f\u0438\u0448\u0435\u043c\/\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 tiered storage<\/h3>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043f\u0438\u043a tieredTopic<br \/><code>.\/bin\/kafka-console-producer.sh --bootstrap-server localhost:9092 --sync --topic tieredTopic<br \/>>m1<br \/>>m2<br \/>>m3<br \/>>m4<br \/>>m5<br \/>>m6<br \/>>^C<\/code><\/p>\n<p>\u0418 <s>\u043d\u0430 \u0444\u043e\u043d\u0435 \u0437\u0432\u0443\u0447\u0438\u0442 \u043f\u043e\u0431\u0435\u0434\u043d\u0430\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u044f<\/s> \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0430\u043f\u043a\u0430 (\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c) .\/data\/fs_storage\/tiered-storage-demo<\/p>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e (\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e) \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 1 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432 local fs tiered storage, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0434\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f 5 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b. <\/p>\n<p><code>kafka_2.13-3.6.0_local_fs.\/bin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic tieredTopic --from-beginninging<br \/>m1<br \/>m2<br \/>m3<br \/>m4<br \/>m5<br \/>m6<br \/>^C<br \/>Processed a total of 6 messages<\/code> <\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0442\u043e\u0433\u0438<\/h2>\n<h3>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h3>\n<p>\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 tiered storage \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0440\u0435\u043b\u043e\u0441\u0442\u0438 Early Access \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438 (JBOD feature)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u044b\u043c\u0438 \u0442\u043e\u043f\u0438\u043a\u0430\u043c\u0438 (compacted topics)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c tiered storate \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c tiered storage \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka \u043d\u0435\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u043f\u0438\u043a\u0438 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 tiered storage<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c tiered storage \u0432 Kafka, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u0438 3.0 \u0438 \u0432\u044b\u0448\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/Kafka+Tiered+Storage+Early+Access+Release+Notes\" rel=\"noopener noreferrer nofollow\">https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/Kafka+Tiered+Storage+Early+Access+Release+Notes<\/a><\/p>\n<h2> \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e<\/h2>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 Remote Log Manager \u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0447\u0435\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 Log Segment Store \u0438 Log Metadata Store. <\/p>\n<h3>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/h3>\n<p>\u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 (\u0442\u043e\u043f\u0438\u043a \u0431\u044b\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u0443 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u044e)  \u0442\u043e\u043f\u0438\u043a\u0430 tieredTopic.<\/p>\n<p><code>ls .\/data\/kafka\/tieredTopic-0<\/code><\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a14\/011\/90a\/a1401190ae2b8a30e275ccf1c43ade48.png\" width=\"425\" height=\"168\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a14\/011\/90a\/a1401190ae2b8a30e275ccf1c43ade48.png\"\/><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c log.<\/p>\n<p>\u0412 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u0448\u0438\u0442\u0430 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e message offset \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f &#8212; <em>segment start offset<\/em>. <br \/>\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c message offset \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 (\u043e\u0442\u043d\u044f\u0432 \u0435\u0434\u0438\u043d\u0438\u0447\u043a\u0443) &#8212; <em>segment end offset<\/em>. <br \/>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0449\u0435 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 (\u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0430\u0439\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430): <\/p>\n<ul>\n<li>\n<p>\u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c index &#8212; \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e message offset <\/p>\n<\/li>\n<li>\n<p>\u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c timeindex &#8212; \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u0432\u044b\u0448\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <em>00000000000000000000.log<\/em> \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 0 \u0438 1.\u0412 \u0444\u0430\u0439\u043b\u0435 <em>00000000000000000000.index<\/em> \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e, \u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <em>00000000000000000000.timeindex<\/em> \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Kafka consumer \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u043c\u0435\u0442\u043e\u0434\u044b <a href=\"https:\/\/kafka.apache.org\/36\/javadoc\/org\/apache\/kafka\/clients\/consumer\/KafkaConsumer.html#seek(org.apache.kafka.common.TopicPartition,long)\" rel=\"noopener noreferrer nofollow\">seek<\/a> \u0438 <a href=\"https:\/\/kafka.apache.org\/36\/javadoc\/org\/apache\/kafka\/clients\/consumer\/KafkaConsumer.html#offsetsForTimes(java.util.Map)\" rel=\"noopener noreferrer nofollow\">offsetsForTimes<\/a>).<\/p>\n<p><a href=\"https:\/\/strimzi.io\/blog\/2021\/12\/17\/kafka-segment-retention\/\" rel=\"noopener noreferrer nofollow\">\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e \u0444\u0430\u0439\u043b\u044b \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c)<\/a><\/p>\n<p><abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.&#187;>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 <\/abbr><abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.&#187;><br \/><\/abbr><abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.&#187;>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  <\/abbr><abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.&#187;><br \/><\/abbr><abbr class=\"habraabbr\" title=\"\" data-title=\"&lt;p>&lt;\/p>&#187; data-abbr=&#187;\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b,  \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.&#187;>\u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/abbr><\/p>\n<h3>\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430.<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432)<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0432\u043e\u0439 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0447\u0430\u0441\u0442\u0438 <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-405%3A+Kafka+Tiered+Storage\" rel=\"noopener noreferrer nofollow\">KIP-405<\/a>, \u043a\u0430\u0441\u0430\u044e\u0449\u0435\u0439\u0441\u044f Remote Log Manager (RLM) \u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Remote Log Metadata Manager.<\/p>\n<p>RLM \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0438\u0434\u0435\u0440\u0430 \u0438 \u0444\u043e\u043b\u043b\u043e\u0432\u0435\u0440\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438.<\/p>\n<ul>\n<li>\n<p><strong>RLM Leader Task<\/strong><br \/>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u043e\u0442\u0430\u0446\u0438\u044e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430  (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 last message offset \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c last stable offset \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438)  \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 offset\/time\/transaction\/producer-snapshot \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e leader epoch cache \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445  \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0438\u0441\u0442\u0435\u043a\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>RLM Follower Task<\/strong><br \/>\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442 \u0437\u0430 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Remote Log Metadata Manager. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. <\/p>\n<\/li>\n<\/ul>\n<p>RLM \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u044d\u0448 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, LRU) \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0447\u0442\u0435\u043d\u0438\u0439 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u0424\u0430\u0439\u043b\u044b \u043a\u0435\u0448\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 <em>remote-log-index-cache<\/em> \u043f\u0430\u043f\u043a\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c Kafka. \u042d\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (\u043d\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435).<br \/>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u044d\u0448\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>remote.log.index.file.cache.total.size.mb<\/em>.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u043d\u0430 \u0431\u0430\u0437\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HDFS.<br \/>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u0441\u0442\u0440\u043e\u0433\u0443\u044e \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438(LIST in S3), \u043d\u043e \u0438 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (GET \u043f\u043e\u0441\u043b\u0435 DELETE \u0432 S3). \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 S3 \u0447\u0430\u0441\u0442\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 LIST API \u0432\u043b\u0435\u0447\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b.<\/p>\n<p>\u041f\u043e \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f Remote Log Metadata Manager.<\/p>\n<h3>\u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/h3>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 sequence \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0438\u0436\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a9c\/1d9\/0bf\/a9c1d90bfc695165fe90c6efdc88821a.png\" width=\"1017\" height=\"540\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a9c\/1d9\/0bf\/a9c1d90bfc695165fe90c6efdc88821a.png\"\/><\/figure>\n<ul>\n<li>\n<p>RLM   &#8212; Remote Log Manager<\/p>\n<\/li>\n<li>\n<p>RLLMM &#8212; Remote Log Metadata Manager<\/p>\n<\/li>\n<li>\n<p>RSM   &#8212; Remote Storage Manager<\/p>\n<\/li>\n<\/ul>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u043c\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e.<\/p>\n<p>\u0417\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Remote Log Metadata Manager \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439, RLMM \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a28\/c44\/49f\/a28c4449fe537b2ccb3f9b5411a9d7ae.png\" width=\"901\" height=\"541\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a28\/c44\/49f\/a28c4449fe537b2ccb3f9b5411a9d7ae.png\"\/><\/figure>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <strong><em>\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e<\/em><\/strong> \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. <br \/>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0432\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/426\/31d\/244\/42631d244dcb2ee391d332fd06a32039.png\" width=\"1654\" height=\"378\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/426\/31d\/244\/42631d244dcb2ee391d332fd06a32039.png\"\/><\/figure>\n<ul>\n<li>\n<p>Lx  = Local log start offset<\/p>\n<\/li>\n<li>\n<p>Lz  = Local log end offset<\/p>\n<\/li>\n<li>\n<p>Ly  = Last stable offset(LSO)<\/p>\n<\/li>\n<li>\n<p>Ry  = Remote log end offset<\/p>\n<\/li>\n<li>\n<p>Rx  = Remote log start offset<\/p>\n<\/li>\n<\/ul>\n<p>Lz >= Ly >= Lx and Ly >= Ry >= Rx<\/p>\n<h3>\u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430<\/h3>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 consumer-a\u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0447\u0438\u0442\u043a\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u0412\u044b\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442 \u0441 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 consumer-\u0443. Consumer \u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u0442 \u043e \u0442\u043e\u043c \u0432\u0437\u044f\u0442\u044b \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<h2>\u041d\u044b\u0440\u044f\u0435\u043c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Remote Log Metadata Manager<\/h2>\n<h3>\u0421\u043b\u043e\u0432\u0430 \u0434\u0435\u0448\u0435\u0432\u044b, \u043f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434<\/h3>\n<p>\u041b\u044e\u0431\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f RLMM \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <em>org.apache.kafka.server.log.remote.storage.RemoteLogMetadataManager<\/em>. <\/p>\n<p>Apache Kafka 3.6.0 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Remote Log Metadata Manager \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u043e\u043f\u0438\u043a\u0430. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432\u043a\u043b\u0430\u0441\u0441\u0435 <em>org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager<\/em>.<\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c tiered storage \u0431\u044b\u043b\u0441\u043e\u0437\u0434\u0430\u043d \u0442\u043e\u043f\u0438\u043a <em>__remote_log_metadata<\/em>. \u0412 \u0442\u043e\u043f\u0438\u043a\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. <\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0436\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c, \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u043f\u0438\u043a\u0430.<\/p>\n<h3>\u0422\u0443\u043a-\u0442\u0443\u043a, \u043a\u0442\u043e \u0432 \u0442\u043e\u043f\u0438\u043a\u0435 \u0436\u0438\u0432\u0435\u0442?<\/h3>\n<p>\u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0432 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u043e\u043f\u0438\u043a\u0430. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f Kafka.<\/p>\n<p><code>.\/bin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 \\ <br \/>--topic __remote_log_metadata \\ <br \/>--from-beginning<\/code><\/p>\n<p>\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043f\u043e\u0441\u044b\u043f\u0430\u043b\u0438\u0441\u044c \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430 <em>tieredTopic$\ufffd8\ufffd\ufffd4MB\ufffd+\ufffd7\ufffd\ufffd\ufffdi\ufffd\ufffdD\ufffd\ufffdaN8a\/_\u0104\ufffd\ufffd*\ufffd\ufffd<\/em>. \u0427\u0438\u0442\u0430\u0442\u044c  \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u043e \u0441\u0438\u043b\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c \u0445\u0430\u043a\u0435\u0440\u0430\u043c. \u0418 \u044d\u0442\u043e \u043d\u0435 \u043c\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439.<\/p>\n<p>\u0421\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u0443\u0447\u0438\u0432 \u043a\u043e\u0434, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0442\u043e\u043f\u0438\u043a \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <em>org.apache.kafka.server.log.remote.storage.RemoteLogMetadata<\/em>:<\/p>\n<ul>\n<li>\n<p>RemoteLogSegmentMetadata &#8212; \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u041d\u043e\u0432\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c COPY_SEGMENT_STARTED<\/p>\n<\/li>\n<li>\n<p>RemoteLogSegmentMetadataUpdate &#8212; \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. <\/p>\n<\/li>\n<li>\n<p>RemoteLogSegmentMetadataSnapshot &#8212; \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/li>\n<li>\n<p>RemotePartitionDeleteMetadata &#8212; \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f <strong>\u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438<\/strong> \u0442\u043e\u043f\u0438\u043a\u0430. <\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 toString \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u0445 \u043f\u043e\u043b\u044f\u0445.<\/p>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c\/\u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 <em>TopicBasedRemoteLogMetadataManager<\/em> \u043f\u0440\u043e\u0434\u044c\u044e\u0441\u0435\u0440\u0430 \u0438 \u043a\u043e\u043d\u0441\u044c\u043c\u0435\u0440\u0430.<\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0432 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 \u0438 \u043a\u043e\u043d\u0441\u044c\u044e\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e serializer\u0438 deserializer, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044f \u0440\u0435\u0448\u0438\u043b \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c. \u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <em>initializeProducerConsumerProperties<\/em> \u043a\u043b\u0430\u0441\u0441\u0430 <em>org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManagerConfig<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435.<\/p>\n<p><code>private void initializeProducerConsumerProperties(Map&lt;String, ?> configs) {<br \/>     Map&lt;String, Object> commonClientConfigs = new HashMap&lt;>();<br \/>     Map&lt;String, Object> producerOnlyConfigs = new HashMap&lt;>();<br \/>     Map&lt;String, Object> consumerOnlyConfigs = new HashMap&lt;>();<\/p>\n<p>     for (Map.Entry&lt;String, ?> entry : configs.entrySet()) {<br \/>         String key = entry.getKey();<br \/>         if (key.startsWith(REMOTE_LOG_METADATA_COMMON_CLIENT_PREFIX)) {<br \/>             commonClientConfigs.put(<br \/>             key.substring(<br \/>                 REMOTE_LOG_METADATA_COMMON_CLIENT_PREFIX.length()), <br \/>                 entry.getValue()<br \/>             );         <br \/>          } else if (key.startsWith(REMOTE_LOG_METADATA_PRODUCER_PREFIX)) {                    <br \/>              producerOnlyConfigs.put(<br \/>              key.substring(<br \/>                  REMOTE_LOG_METADATA_PRODUCER_PREFIX.length()), <br \/>                  entry.getValue()<br \/>              );         <br \/>         } else if (key.startsWith(REMOTE_LOG_METADATA_CONSUMER_PREFIX)) {             <br \/>             consumerOnlyConfigs.put(<br \/>             key.substring(<br \/>                 REMOTE_LOG_METADATA_CONSUMER_PREFIX.length()), <br \/>                 entry.getValue()<br \/>             );<br \/>         }<br \/>      }<\/p>\n<p>     commonProps = new HashMap&lt;>(commonClientConfigs);<\/p>\n<p>     HashMap&lt;String, Object> allProducerConfigs = new HashMap&lt;>(commonClientConfigs);    <br \/>     allProducerConfigs.putAll(producerOnlyConfigs);<br \/>     producerProps = createProducerProps(allProducerConfigs);<\/p>\n<p>     HashMap&lt;String, Object> allConsumerConfigs = new HashMap&lt;>(commonClientConfigs);<br \/>     allConsumerConfigs.putAll(consumerOnlyConfigs);<br \/>     consumerProps = createConsumerProps(allConsumerConfigs); <br \/>}<\/code><\/p>\n<p>\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u0440\u043e\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0449\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0437\u0430\u0442\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <em>createProducerProps<\/em>.<\/p>\n<p><code>private Map&lt;String, Object> createProducerProps(HashMap&lt;String, Object> allProducerConfigs) {<br \/>     Map&lt;String, Object> props = new HashMap&lt;>(allProducerConfigs);<br \/>     props.put(<br \/>         ProducerConfig.CLIENT_ID_CONFIG, <br \/>         clientIdPrefix + \"_producer\"<br \/>     );<br \/>     props.put(ProducerConfig.ACKS_CONFIG, \"all\");<br \/>     props.put(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, 1);<br \/>     props.put(<br \/>         ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, <br \/>         ByteArraySerializer.class.getName()<br \/>     );<br \/>     props.put(<br \/>         ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, <br \/>         ByteArraySerializer.class.getName()<br \/>     );<br \/>     return Collections.unmodifiableMap(props);<br \/> }<\/code><\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <em>createProducerProps<\/em> \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u044e\u0447\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0432\u0438\u0434.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u0441\u0442\u0430\u0440\u0430\u0439\u0441\u044f &#8212; \u043d\u0435 \u0441\u0442\u0430\u0440\u0430\u0439\u0441\u044f \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433, \u0430 \u0432 \u0442\u043e\u043f\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Java \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u0430. \u041e\u043d\u0438 \u043d\u0435 \u0445\u043e\u0442\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u0447\u0443\u043c\u0435\u043b\u044b\u0435 \u0440\u0443\u0447\u043a\u0438\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043b\u043e\u043c\u0430\u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka.<\/p>\n<h3>\u0412\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u044f \u0442\u0435\u0431\u044f \u0443\u0432\u0438\u0436\u0443<\/h3>\n<p>\u0420\u0430\u0437 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c\/\u0447\u0442\u0435\u043d\u0438\u0435 Remote Log Metadata Manager \u0432 \u0442\u043e\u043f\u0438\u043a <em>__remote_log_metadata<\/em>, \u0442\u043e \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0442\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u043f\u0438\u043a\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u044e\u043c\u0435\u0440\u043e\u043c <em>kafka-console-consumer.sh<\/em>.<\/p>\n<p>\u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. \u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434.<br \/>\u0421\u043e\u0437\u0434\u0438\u043c Java \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e Gradle-\u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0438 \u043e\u0434\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c <em>ru.mg.RsmmMetadataDeserializer<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>build.gradle.kts<\/summary>\n<div class=\"spoiler__content\">\n<p><code>plugins {<br \/>    id(\"java\")<br \/>}<\/p>\n<p>group = \"ru.mg\" <br \/>version = \"1.0-SNAPSHOT\"<\/p>\n<p>repositories {<br \/>     mavenCentral()<br \/> }<\/p>\n<p>dependencies {<br \/>     implementation(\"org.apache.kafka:kafka-clients:3.6.0\")<br \/>     implementation(\"org.apache.kafka:kafka-storage:3.6.0\")<br \/>     implementation(\"org.apache.kafka:kafka-storage-api:3.6.0\")<br \/>} <\/code><\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>RsmmMetadataDeserializer.java<\/summary>\n<div class=\"spoiler__content\">\n<p>package ru.mg;<\/p>\n<p>import org.apache.kafka.common.serialization.Deserializer;<br \/>import org.apache.kafka.server.log.remote.metadata.storage.serialization.RemoteLogMetadataSerde;<\/p>\n<p><code>public class RsmmMetadataDeserializer implements Deserializer&lt;String> {<br \/>    private RemoteLogMetadataSerde serde = new RemoteLogMetadataSerde();<\/p>\n<p>    @Override<br \/>     public String deserialize(String topic, byte[] data) {<br \/>         return serde.deserialize(data).toString();<br \/>     }<br \/> }<\/code><\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u0434 \u0432 jar \u0444\u0430\u0439\u043b (gradlew build) \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0443 lib \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kafka.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 <em>__remote_log_metadata<\/em> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043f\u043e\u043f\u0434\u0430\u043f\u043a\u0435 configs \u0444\u0430\u0439\u043b <em>remote-metadata-formatter.properties<\/em> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<p><code>print.timestamp=true<br \/>print.offset=true<br \/>print.key=true<br \/>key.separator= \\ | <br \/>print.headers=true<\/code><\/p>\n<p> \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p><code>.\/bin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 \\ <br \/>--topic __remote_log_metadata \\ <br \/>--from-beginning \\ <br \/>--formatter-config=.\/config\/remote-metadata-formatter.properties \\ <br \/>--value-deserializer=ru.mg.RsmmMetadataDeserializer \\ <br \/>--timeout-ms=1000<\/code><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435<\/p>\n<p>CreateTime:1699124091830 | Offset:260 | NO_HEADERS | null | RemoteLogSegmentMetadata{remoteLogSegmentId=RemoteLogSegmentId{topicIdPartition=JN44_qs0TUKBK6U3nr-ZaQ:tieredTopic-0, id=TWPRUYY7QXWZE9X7c0yCrw}, startOffset=14, endOffset=15, brokerId=0, maxTimestampMs=1699123865714, eventTimestampMs=1699124091829, segmentLeaderEpochs={0=14}, segmentSizeInBytes=140, customMetadata=Optional.empty, state=COPY_SEGMENT_STARTED}<\/p>\n<p>\u0433\u0434\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 CreateTime, Offset, Headers, Message key, Message value \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c |.  <\/p>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u043f\u0438\u043a\u0430<\/h3>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e grep \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u041d\u0430\u0448\u043b\u0438\u0441\u044c \u0441\u0442\u0430\u0442\u0443\u0441\u044b COPY_SEGMENT_STARTED, DELETE_SEGMENT_STARTED, DELETE_SEGMENT_FINISHED, \u0432 \u0432\u043e\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430COPY_SEGMENT_FINISHED \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043b\u043e\u0433\u0430 .\/logs\/server.log \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 COPY_SEGMENT_FINISHED.\u0412 \u043b\u043e\u0433\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430<\/p>\n<p>org.apache.kafka.server.log.remote.storage.RemoteStorageException: java.lang.IllegalStateException: <strong>Not enough indexes have been added. At least 4 required<\/strong>     at io.aiven.kafka.tieredstorage.RemoteStorageManager.copyLogSegmentData(RemoteStorageManager.java:232)     at kafka.log.remote.RemoteLogManager$RLMTask.copyLogSegment(RemoteLogManager.java:736)     at kafka.log.remote.RemoteLogManager$RLMTask.copyLogSegmentsToRemote(RemoteLogManager.java:687)     at kafka.log.remote.RemoteLogManager$RLMTask.run(RemoteLogManager.java:790)     at java.base\/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)     at java.base\/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)     at java.base\/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)     at java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)     at java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)     at java.base\/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.IllegalStateException: Not enough indexes have been added. At least 4 required     at io.aiven.kafka.tieredstorage.manifest.SegmentIndexesV1Builder.build(SegmentIndexesV1Builder.java:39)     at io.aiven.kafka.tieredstorage.RemoteStorageManager.uploadIndexes(RemoteStorageManager.java:309)     at io.aiven.kafka.tieredstorage.RemoteStorageManager.copyLogSegmentData(RemoteStorageManager.java:225)     &#8230; 9 more<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager \u043c\u0435\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 `build()` \u043a\u043b\u0430\u0441\u0441\u0430 <em>io.aiven.kafka.tieredstorage.manifest.SegmentIndexesV1Builder<\/em><\/p>\n<p><code>public SegmentIndexesV1 build() {     if (indexes.size() &lt; 4) {         throw new IllegalStateException(\"Not enough indexes have been added. At least 4 required\");     }     if (indexes.size() == 4 &amp;&amp; indexes.containsKey(IndexType.TRANSACTION)) {         throw new IllegalStateException(\"OFFSET, TIMESTAMP, PRODUCER_SNAPSHOT, \"             + \"and LEADER_EPOCH indexes are required\");     }     return new SegmentIndexesV1(         indexes.get(IndexType.OFFSET),         indexes.get(IndexType.TIMESTAMP),         indexes.get(IndexType.PRODUCER_SNAPSHOT),         indexes.get(IndexType.LEADER_EPOCH),         indexes.get(IndexType.TRANSACTION)     ); }<\/code>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Aiven Open\/tiered-storage-for-apache-kafka \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0432\u0438\u0434\u043e\u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. <\/p>\n<p>\u0410 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441?  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u0438\u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0438 \u0433\u0440\u0430\u0431\u043b\u0438.<\/p>\n<h3>\u041f\u0440\u044b\u0433\u0430\u0435\u043c \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u044f\u0445 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0434\u043b\u0438\u043d\u044b<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043c\u0435\u0442\u043e\u0434 build \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0418 \u0432\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c &#8212; \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e offset \u043d\u0435\u0442. \u0412\u0441\u0435\u0433\u043e \u0432 indexes \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 build \u043b\u0435\u0436\u0438\u0442 \u0442\u0440\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 TIMESTAMP, PRODUCER_SNAPSHOT, LEADER_EPOCH. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0432 \u0444\u0430\u0439\u043b\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 tieredStorage\u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c index \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u043d\u043e \u0438\u043c\u0435\u044e\u0442 \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0434\u043b\u0438\u043d\u0443. <\/p>\n<p>\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u0432 Aiven Open\/tiered-storage-for-apache-kafka \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0438\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u041a\u043e\u0434 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u043b\u0430 \u0432\u044b\u0448\u0435 \u0432 RemoteLogManager (\u0430 \u044d\u0442\u043e \u0443\u0436\u0435 \u0447\u0430\u0441\u0442\u044c \u044f\u0434\u0440\u0430 Kafka). <\/p>\n<p>\u041c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0435\u043c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u043e\u0439\u0442\u0438 \u0433\u0440\u0430\u0431\u043b\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u043e\u043f\u0438\u043a tieredStorage \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u0443\u0441\u0442\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u0438 Zookeeer, \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u043c \u0444\u0430\u0439\u043b\u044b \u0438\u0437 .\/data\/fs_storage, .\/data\/kafka, .\/data\/zk. \u041f\u043e\u0441\u043b\u0435 \u0447\u0438\u0441\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c Zookeeer \u0438 \u0431\u0440\u043e\u043a\u0435\u0440 Kafka. \u041f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u043e\u043f\u0438\u043a tieredTopic \u0441 \u0431\u041e\u043b\u044c\u0448\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 local.retention.ms \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 1 000 000 \u0431\u0430\u0439\u0442.<\/p>\n<p>.\/bin\/kafka-topics.sh &#8212;create &#8212;topic tieredTopic &#8212;bootstrap-server localhost:9092 \\<br \/>&#8212;config remote.storage.enable=true \\<br \/>&#8212;config local.retention.ms=10000 \\<br \/>&#8212;config retention.ms=300000 \\<br \/>&#8212;config segment.bytes=1000000<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 .\/data\/kafka\/tieredTopic-0 (\u0442\u0430\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430).\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c index \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u043c\u0435\u0440 10 \u041c\u0411. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0444\u0430\u0439\u043b \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0440\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u043e\u043f\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439. \u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u044b\u043f\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u0431\u0438\u0432\u0430\u044f \u0438\u0445 \u0440\u0443\u043a\u0430\u043c\u0438.\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c <em>.\/bin\/kafka-producer-perf-test.sh<\/em>.<\/p>\n<p>.\/bin\/kafka-producer-perf-test.sh &#8212;topic tieredTopic \\ <br \/>&#8212;producer-props bootstrap.servers=localhost:9092 \\ <br \/>&#8212;num-records 10000 &#8212;record-size 1024 &#8212;throughput -1 <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u043a\u0440\u0438\u043f\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0432 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 local.retention.ms \u0440\u0430\u0432\u043d\u043e\u0433\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434,\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u044c\u043c\u0435\u0440\u043e\u043c \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 RemoteLogMetadataManager.<\/p>\n<p><code>.\/bin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 \\ <br \/>--topic __remote_log_metadata \\ <br \/>--from-beginning \\ <br \/>--formatter-config=.\/config\/remote-metadata-formatter.properties \\ <br \/>--value-deserializer=ru.mg.RsmmMetadataDeserializer \\ <br \/>--timeout-ms=1000<\/code> <\/p>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c grep \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c COPY_SEGMENT_FINISHED. \u0417\u0430\u043f\u0438\u0441\u0438 COPY_SEGMENT_STARTED, DELETE_SEGMENT_STARTED, DELETE_SEGMENT_FINISHED \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c. \u0412 \u043b\u043e\u0433\u0430\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>\u041e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0431\u043b\u0438 \u0441 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. <\/p>\n<h3>\u041d\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c<\/h3>\n<p>\u0414\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u043e\u043f\u0438\u043a tieredTopic \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u043d\u044b\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435.<\/p>\n<p><code>.\/bin\/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic tieredTopic \\<br \/> --from-beginning <\/code><\/p>\n<p>\u041d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager \u043e\u0442 Aiven Open \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 chunk-\u0430\u043c\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043d\u0435\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h2>\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RSM \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 Apache Kafka<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Remote Storage Manager \u043e\u0442 Aiven Open \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043f\u0440\u043e\u0447\u0442\u0438\u0442\u0435 \u0436\u0435, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. <\/p>\n<p>\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Apache Kafka \u0435\u0441\u0442\u044c Quick Start Example \u0434\u043b\u044f tiered storage. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e RSM <em>org.apache.kafka.server.log.remote.storage.LocalTieredStorage<\/em>. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u044d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RSM \u043e\u0442 Kafka<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Quick Start Example \u0434\u043b\u044f tiered storage. \u0411\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Kafka 3.6 \u0441 \u0441\u0430\u0439\u0442\u0430 https:\/\/kafka.apache\/org<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 gradle \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 clean :storage:testJar <\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 jar \u0444\u0430\u0439\u043b kafka-storage-3.6.0-test.jar \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0443 .\/lib \u043a\u043e\u0440\u043d\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 .\/config\/server.properties \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 RSM \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f LocalTieredStorage<br \/><code>remote.log.storage.manager.class.name=org.apache.kafka.server.log.remote.storage.LocalTieredStorage remote.log.storage.manager.class.path=.\/libs\/kafka-storage-3.6.0-test.jar remote.log.storage.manager.impl.prefix=rsm.config. rsm.config.dir=.\/data\/fs_storage<\/code> <\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c) \u0431\u0440\u043e\u043a\u0435\u0440 Kafka<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d) \u0442\u043e\u043f\u0438\u043a tieredStorage<\/p>\n<\/li>\n<li>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u043e\u043c <em>.\/bin\/kafka-producer-perf-test.sh<\/em> \u043f\u0438\u0448\u0435\u043c \u0432 \u0442\u043e\u043f\u0438\u043a tieredStorage \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u044c\u044e\u043c\u0435\u0440\u043e\u043c \u0447\u0438\u0442\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a<\/p>\n<\/li>\n<\/ol>\n<p>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 chunk, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 RSM \u043e\u0442 AivenOpen.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u043f\u044f\u0442\u044c \u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e. \u041f\u0440\u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0432 \u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b RLMM<\/p>\n<p>RemoteLogManager=0 partition=NHrudFqRSz6kJPczeOA0cQ:tieredTopic-0] Error occurred while copying log segments of partition: NHrudFqRSz6kJPczeOA0cQ:tieredTopic-0 (kafka.log.remote.RemoteLogManager$RLMTask) java.lang.IllegalStateException: This instance is in invalid state, initialized: false close: false     at org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager.ensureInitializedAndNotClosed(TopicBasedRemoteLogMetadataManager.java:507)     at org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager.listRemoteLogSegments(TopicBasedRemoteLogMetadataManager.java:253)     at kafka.log.remote.RemoteLogManager.findLogStartOffset(RemoteLogManager.java:1438)     at kafka.log.remote.RemoteLogManager$RLMTask.maybeUpdateLogStartOffsetOnBecomingLeader(RemoteLogManager.java:610)     at kafka.log.remote.RemoteLogManager$RLMTask.copyLogSegmentsToRemote(RemoteLogManager.java:661)     at kafka.log.remote.RemoteLogManager$RLMTask.run(RemoteLogManager.java:790)     at java.base\/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)     at java.base\/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)     at java.base\/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)     at java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)     at java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)     at java.base\/java.lang.Thread.run(Thread.java:829)<\/p>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432 TopicBasedRemoteLogMetadataManager \u043d\u0435 \u0432\u0441\u0435 \u0433\u043b\u0430\u0434\u043a\u043e, \u043d\u043e \u044d\u0442\u043e \u0436\u0435 Early Access Release.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b `org.apache.kafka.server.log.remote.storage.LocalTieredStorage` \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0442\u043e\u043f\u0438\u043a\u0430, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0445 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0434\u043b\u044f \u043f\u044b\u0442\u043b\u0438\u0432\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0434\u0432\u043e\u0434\u0438\u043c \u0438\u0442\u043e\u0433\u0438, \u043d\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0446\u0435\u043b\u0438<\/h2>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f tiered storage \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kafka \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>\u041c\u044b \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438\u0441\u044c \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u0432 Kafka \u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438  \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0433\u0440\u0430\u0431\u043b\u044f\u043c.  \u0424\u0430\u0439\u043b\u043e\u0432\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Kafka \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430. <\/p>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442 Aiven Open \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c  \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0435\u0439 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e\u0447\u0438\u043d\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u043e\u043b\u0435\u0435  \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c chunk-\u043e\u0432. <\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 Remote Storage Manager  Aiven Open \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 S3 Minio. <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/773374\/\"> https:\/\/habr.com\/ru\/articles\/773374\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0418\u0422-\u043d\u0438\u043a\u0438.  \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 \u041c\u0438\u0445\u0430\u0438\u043b \u0413\u043e\u043b\u043e\u0432\u0430\u043d\u043e\u0432. <s>\u0412 \u044d\u0442\u043e\u043c \u0441\u0435\u0437\u043e\u043d\u0435 \u043d\u0430\u0448\u0435\u0433\u043e Kafka<\/s> <s>\u0448\u043e\u0443<\/s> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u0432 Apache Kafka. \u0422\u0435\u043e\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439.<\/p>\n<h2>Tiered storage \u0432 \u041a\u0430\u0444\u043a\u0430<\/h2>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 tiered storage \u0438 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u041a\u0430\u0444\u043a\u0435<\/h3>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430. \u041f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c &#171;\u0433\u043e\u0440\u044f\u0447\u0435\u043c&#187; \u0441\u043b\u043e\u0435 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044f\u0441\u044c \u0432 \u0441\u043b\u043e\u0439 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445&#187; \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043b\u043e\u0439 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442, \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043d,\u0447\u0435\u043c &#171;\u0433\u043e\u0440\u044f\u0447\u0438\u0439&#187; \u0441\u043b\u043e\u0439, \u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u043b\u044f \u043e\u0444\u0444\u043b\u0430\u0439\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438,\u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>\u0414\u043e \u0432\u0435\u0440\u0441\u0438\u0438 3.6 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 Kafka \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a \u0445\u043e\u0441\u0442\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0441\u0432\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432. \u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0431\u0440\u043e\u043a\u0435\u0440\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u0438 3.6 Apache Kafka \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Early Access \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f tiered storage. <\/p>\n<p><strong><em>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f tiered storage \u0432 Apache Kafka 3.6 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/em><\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f tiered storage \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 Confluent Kafka Enterprise  (\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430) \u0435\u0449\u0435 \u0437\u0430\u0434\u043e\u043b\u0433\u043e \u0434\u043e \u0432\u044b\u0445\u043e\u0434\u0430 Apache Kafka 3.6.\u0422\u0430\u043a\u0436\u0435 \u0438 \u0434\u043b\u044f <a href=\"https:\/\/docs.redpanda.com\/current\/manage\/tiered-storage\/\" rel=\"noopener noreferrer nofollow\">Redpanda<\/a> \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0435&#187; \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 tiered storage. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 tiered storage \u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438\/\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 tiered storage \u043c\u043e\u0436\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f S3 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 Kafka \u0441 tiered storage<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0440\u043e\u043a\u0435\u0440. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043b\u0438\u0434\u0435\u0440\u043e\u043c \u0438\u043b\u0438 \u0444\u043e\u043b\u043b\u043e\u0432\u0435\u0440\u043e\u043c \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438 \u043d\u0430 \u043d\u0435\u043c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438.\u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 &#171;\u043f\u0440\u043e\u043b\u0438\u0432\u043a\u0438&#187; \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\u043c \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445.\u041d\u0430\u043b\u0438\u0447\u0438\u0435 tiered storage \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u0443 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440\u0430-\u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 tiered storage \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442: <\/p>\n<ul>\n<li>\n<p>\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d\u043b\u0430\u0439\u043d \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 &#171;batch&#187; \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kafka \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 Kafka, \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c):<\/p>\n<ul>\n<li>\n<p>Tiered storage: \u041c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435. \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u043e\u0435\u0432.<\/p>\n<\/li>\n<li>\n<p>Kafka: \u0411\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"https:\/\/kafka.apache.org\" rel=\"noopener noreferrer nofollow\">Apache Kafka<\/a><\/p>\n<\/li>\n<li>\n<p>Topic (\u0422\u043e\u043f\u0438\u043a): \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 (partition).<\/p>\n<\/li>\n<li>\n<p>Partition (\u0440\u0430\u0437\u0434\u0435\u043b): \u0422\u043e\u043f\u0438\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432, \u0442.\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0434\u0435\u043b. \u0420\u0430\u0437\u0434\u0435\u043b\u044b \u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 0.\u0420\u0430\u0437\u0434\u0435\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430.\u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0440\u043e\u043a\u0435\u0440\u0430\u043c\u0438 Kafka.<\/p>\n<\/li>\n<li>\n<p>Segment (\u0441\u0435\u0433\u043c\u0435\u043d\u0442): \u0427\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 Kafka \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\/\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>Index (\u0438\u043d\u0434\u0435\u043a\u0441): \u0424\u0430\u0439\u043b \u0438\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>Message offset (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f): \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043b\u043e\u0433\u0430 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438). \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u043e\u043f\u0438\u043a\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (message offset). \u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>Start topic partition offset (\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0442\u043e\u043f\u0438\u043a\u0430): \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>End topic partition offset (\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0442\u043e\u043f\u0438\u043a\u0430): \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. <\/p>\n<h2>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b tiered storage<\/h2>\n<h3>\u0426\u0435\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 Apache Kafka \u0432\u0435\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <a href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-405%3A+Kafka+Tiered+Storage\" rel=\"noopener noreferrer nofollow\">KIP-405<\/a>. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0437\u0430\u0434\u0430\u0447\u0438 <a href=\"https:\/\/issues.apache.org\/jira\/browse\/KAFKA-15420\" rel=\"noopener noreferrer nofollow\">KAFKA-15420<\/a>.<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Goals<\/strong><\/p>\n<p>Extend Kafka&#8217;s storage beyond the local storage available on the  Kafka cluster by retaining the older data in an external store,  such as HDFS or S3 with minimal impact on the internals of Kafka.  Kafka behavior and operational complexity must not change  for existing users that do not have tiered storage feature  configured.<\/p>\n<\/blockquote>\n<p>\u0426\u0435\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Kafka  \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432  \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0442\u0430\u043a\u043e\u0435 \u043a\u0430\u043a HDFS \u0438\u043b\u0438 S3 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u0435\u043c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e  Kafka.  \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Kafka \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0445\u0443\u0434\u0448\u0438\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0435  \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u0412\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d<\/h3>\n<figure class=\"full-width\">\n<div><figcaption>\u0414\u0438\u0437\u0430\u0439\u043d \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b remote storage<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>Remote Log Manager (RLM)<\/p>\n<\/li>\n<li>\n<p>Remote Log Metadata Manager (RSM)<\/p>\n<\/li>\n<li>\n<p>Remote Storage Manager<\/p>\n<\/li>\n<\/ul>\n<p><em>Remote Log Manager<\/em> \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0432 Kafka Log Manager<\/p>\n<ul>\n<li>\n<p>\u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u043d\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0435, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e Log Manager) <\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (remote storage) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>RemoteStorageManager<\/em><\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 <em>RemoteLogMetadataManager<\/em>-\u0443.<\/p>\n<\/li>\n<\/ul>\n<p><em>RemoteLogManager<\/em> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API.<\/p>\n<p><em>Remote Storage Manager<\/em> <strong><em>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em><\/strong> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 **\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432** \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Apache Kafka \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RSM \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f API. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HDFS \u0438 S3 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f \u043a\u043e\u0434\u0430 Kafka, \u0442.\u0435 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f\u0445. \u041f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u0434\u043b\u044f Kafka connectors.<\/p>\n<p><em>RemoteLogMetadataManager<\/em> <strong><em>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em><\/strong> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 <strong><em>\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445<\/em><\/strong> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u043e\u043f\u0438\u043a. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 Apache Kafka 3.6 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Log Manager \u0438 RemoteLogMetadataManager. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 3.6 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f &#171;\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0445&#187; \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0422\u0430\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0430 \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0439 \u0441\u0438\u043b\u0435 opensource.<\/p>\n<p>\u041d\u0430 Github \u0438\u043c\u0435\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/linkedin\/kafka-remote-storage-azure\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f Azure Blob Storage<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/github.com\/Aiven-Open\/tiered-storage-for-apache-kafka\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 Avien Open<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u0434\u043b\u044f \u043d\u0435\u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 S3 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 Google Cloud, AWS \u0438 Minio, \u0430 \u0442\u0430\u043a\u0436\u0435 Azure Blob Storage.<\/p>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Avien Open \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 Minio, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435) \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 tiered storage.<\/p>\n<h2>\u041f\u043e\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u0434<\/h2>\n<h3>\u041f\u0440\u0435\u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b<\/h3>\n<p>\u041f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043c\u0435\u043b\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u043c \u043d\u0430 Manjaro Linux, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Linux. \u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Apache Kafka \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>Remote Storage Manager<\/em> \u043e\u0442 Avien Open \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442.<\/p>\n<h3>\u0428\u0430\u0433 1. \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043e\u0434\u043d\u043e\u0443\u0437\u043b\u043e\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430<\/h3>\n<p>1. \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Kafka 3.6.0 \u0434\u043b\u044f Linux \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/downloads.apache.org\/kafka\/3.6.0\/kafka_2.13-3.6.0.tgz\" rel=\"noopener noreferrer nofollow\">Apache Kafka<\/a>.<\/p>\n<p>2. \u0420\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432. \u041f\u0430\u043f\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>tar xvzf kafka_2.13-3.6.0.tgz<\/code><\/p>\n<p>3. \u0412 \u043f\u0430\u043f\u043a\u0435 kafka_2.13-3.6.0 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Zookeeper, Kafka \u0438 remote storage<br \/><code>mkdir -p .\/data\/zk<br \/>mkdir -p .\/data\/kafka<br \/>mkdir -p .\/data\/fs_storage<\/code><\/p>\n<p>4. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c zookeeper. <br \/>\u0412 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 .\/config \u0432 \u0444\u0430\u0439\u043b\u0435 <em>zookeeper.properties<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 <br \/><code>dataDir=.\/data\/zk<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b .\/config\/zookeeper.properties<\/summary>\n<div class=\"spoiler__content\">\n<p># Licensed to the Apache Software Foundation (ASF) under one or more <br \/># contributor license agreements.  See the NOTICE file distributed with <br \/># this work for additional information regarding copyright ownership. <br \/># The ASF licenses this file to You under the Apache License, Version 2.0 <br \/># (the &#171;License&#187;); you may not use this file except in compliance with <br \/># the License.  You may obtain a copy of the License at <br \/>#  <br \/>#    http:\/\/www.apache.org\/licenses\/LICENSE-2.0 <br \/>#  <br \/># Unless required by applicable law or agreed to in writing, software <br \/># distributed under the License is distributed on an &#171;AS IS&#187; BASIS, <br \/># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br \/># See the License for the specific language governing permissions and <br \/># limitations under the License. <br \/># the directory where the snapshot is stored. <br \/>dataDir=.\/data\/zk <\/p>\n<p># the port at which the clients will connect <br \/>clientPort=2181 <\/p>\n<p># disable the per-ip limit on the number of connections since this is a non-production config <br \/>maxClientCnxns=0 <\/p>\n<p># Disable the adminserver by default to avoid port conflicts. <br \/># Set the port to something non-conflicting if choosing to enable this admin.enableServer=false <br \/># admin.serverPort=8080 <\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c zookeeper \u0438\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0438\u0437 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Kafka<br \/><code>.\/bin\/zookeeper-server-start.sh -daemon .\/config\/zookeeper.properties<\/code><\/p>\n<p>5. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Kafka.<br \/>\u0412 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 .\/config \u0432 \u0444\u0430\u0439\u043b\u0435 <em>server.properties<\/em> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-359944","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359944","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=359944"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359944\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=359944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=359944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=359944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}