{"id":427275,"date":"2024-07-25T21:19:32","date_gmt":"2024-07-25T21:19:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=427275"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=427275","title":{"rendered":"<span>\u041f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a Kafka tiered storage \u2014 2<\/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 <strong>\u041c\u0438\u0445\u0430\u0438\u043b \u0413\u043e\u043b\u043e\u0432\u0430\u043d\u043e\u0432<\/strong>. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 tiered storage \u0432 Apache Kafka. \u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u00ab<a href=\"https:\/\/habr.com\/ru\/articles\/773374\/\">\u041f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a Kafka tiered storage<\/a>\u00bb. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0447\u0438\u043d\u0438\u043c, \u0447\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0440\u0430\u043d\u0435\u0435 (\u0441\u0431\u043e\u0440\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 AivenOpen) \u0438 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f Minio S3 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0435\u043a\u044d\u043d\u0434\u0430. \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0442\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>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"#1\">Kafka \u0432 \u0412\u0422\u0411<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\">\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\">\u0427\u0438\u043d\u0438\u043c e2e \u0442\u0435\u0441\u0442\u044b \u0432 Aiven Open<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\">Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430<\/a><br \/>\u2022 <a href=\"#5\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CustomMetadata<\/a><br \/>\u2022 <a href=\"#6\">\u041a\u043b\u0430\u0441\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 RemoteStorageException \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f\u044b<\/a><br \/>\u2022 <a href=\"#7\">\u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata<\/a><br \/>\u2022 <a href=\"#8\">\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData<\/a><br \/>\u2022 <a href=\"#9\">\u041c\u0435\u0442\u043e\u0434\u044b fetchLogSegment<\/a><br \/>\u2022 <a href=\"#10\">\u041c\u0435\u0442\u043e\u0434 fetchIndex<\/a><br \/>\u2022 <a href=\"#11\">\u041c\u0435\u0442\u043e\u0434 deleteLogSegmentData<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#12\">\u041a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Aiven Open<\/a><br \/>\u2022 <a href=\"#13\">\u0410\u043d\u0430\u043b\u0438\u0437 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439<\/a><br \/>\u2022 <a href=\"#14\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a><br \/>  \u2014 <a href=\"#15\">\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 S3 (provider backends)<\/a><br \/>  \u2014 <a href=\"#16\">\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 (chunking)<\/a><br \/>  \u2014 <a href=\"#17\">\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Remote Storage Manager<\/a><br \/>  \u2014 <a href=\"#18\">\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><br \/>  \u2014 <a href=\"#19\">S3 Multipart Upload<\/a><br \/>  \u2014 <a href=\"#20\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u044d\u0448 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><br \/>\u2022 <a href=\"#21\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/a><br \/>  \u2014 <a href=\"#22\">\u041e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438<\/a><br \/>  \u2014 <a href=\"#23\">\u0418\u0449\u0435\u043c \u0432\u0445\u043e\u0434<\/a><br \/>  \u2014 <a href=\"#24\">\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/a><br \/>  \u2014 <a href=\"#25\">\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><br \/>  \u2014 <a href=\"#26\">\u041a\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 remote storage<\/a><br \/>\u2022 <a href=\"#27\">\u0412\u044b\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#28\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e AivenOpen<\/a><br \/>\u2022 <a href=\"#29\">\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Minio<\/a><br \/>\u2022 <a href=\"#30\">\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 AivenOpen<\/a><br \/>\u2022 <a href=\"#31\">\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 AivenOpen \u0432 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e Apache Kafka<\/a><br \/>\u2022 <a href=\"#32\">\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430<\/a><br \/>\u2022 <a href=\"#33\">\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 remote storage<\/a><br \/>\u2022 <a href=\"#34\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#35\">\u041e\u0441\u043c\u044b\u0441\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2>Kafka \u0432 \u0412\u0422\u0411<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0432 \u0431\u0430\u043d\u043a\u0435 \u0412\u0422\u0411 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u0442\u0440\u0438\u043c\u0430 \u00ab\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u00bb, \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0438 \u0434\u0435\u0448\u0435\u0432\u043e (\u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430).<\/p>\n<p>\u041a\u0430\u0444\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u043d\u043a\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0435\u0445 \u043b\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c Publish-Subscribe \u0438 Streaming. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e \u0443\u0436\u0435 \u043e\u043a\u043e\u043b\u043e 250 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u041b\u044e\u0431\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u0430\u043d\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043f\u0430\u0440\u044b \u043a\u043b\u0430\u0432\u0438\u0448 \u0437\u0430 10 \u043c\u0438\u043d\u0443\u0442  \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0433\u0435\u043e\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c,  \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u0442.\u0434. \u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e \u2014 \u00ab\u043a\u043e\u043c\u043c\u0443\u043d\u0430\u043b\u044c\u043d\u0443\u044e\u00bb \u041a\u0430\u0444\u043a\u0443.<\/p>\n<p>\u0414\u0440\u0443\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u041a\u0430\u0444\u043a\u0443 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u0438\u0434\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0438 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438.  <\/p>\n<p>\u0421\u043a\u0443\u0447\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0433\u0434\u0430. <\/p>\n<p>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0436\u0430\u0440\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f\u043c\u0438. \u0427\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u043a \u043d\u0430\u043c \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0433\u043e\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0441 \u0438\u0434\u0435\u044f\u043c\u0438 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 (\u00ab\u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0432\u0436\u0443\u0445 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u00bb). \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0436\u0443\u0445 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043e\u043d\u043e \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0441 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u0444\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0412\u0422\u0411. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Istio ServiceMesh, Apache ActiveMQ, RabbitMQ, \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430.  <\/p>\n<p>\u041f\u0440\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437. \u0410 \u043f\u043e\u043a\u0430 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<ul>\n<li>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Kafka tiered remote storage;<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 Apache Kafka;<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Remote Storage Manager \u043e\u0442 Aiven Open \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u0430. E2e \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0438\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b;<\/p>\n<\/li>\n<li>\n<p>==&gt; \u041c\u044b \u0442\u0443\u0442;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0447\u0438\u043d\u043a\u0430 e2e \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Remote Storage Manager \u043e\u0442 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u043b\u0430\u043d\u044b.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c e2e \u0442\u0435\u0441\u0442\u044b \u0432 Aiven Open<\/h2>\n<p>\u0412\u0441\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432  \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 .\/gradlew clean build. E2e \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0438\u0441\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043c\u043d\u043e\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 make. \u041f\u0430\u0440\u0430 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0432\u0441\u0435 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c, \u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0431\u043e\u0440\u043a\u0430 java \u043a\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 make \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 17 JDK. \u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 JDK 21 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<h2>Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430<\/h2>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: <code>org.apache.kafka.server.log.remote.storage.RemoteStorageManager<\/code>.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Apache Kafka \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u0432: copyLogSegmentData, \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 fetchLogSegment (\u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c), fetchIndex \u0438 deleteLogSegmentData.<\/p>\n<p>\u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"java\">Optional&lt;CustomMetadata&gt; copyLogSegmentData(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,   LogSegmentData logSegmentData)    throws RemoteStorageException;  InputStream fetchLogSegment(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,   int startPosition)    throws RemoteStorageException;  InputStream fetchIndex(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,    IndexType indexType)    throws RemoteStorageException;  void deleteLogSegmentData(   RemoteLogSegmentMetadata remoteLogSegmentMetadata)    throws RemoteStorageException;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435. \u0414\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 fetchLogSegment \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (range).<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 fetchIndex \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 deleteLogSegmentData \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e CRUD \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.<\/p>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CustomMetadata            <\/h3>\n<p>\u0412 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 copyLogSegmentData \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0438\u043f CustomMetadata. \u042d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \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, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0437\u0430\u0434.<\/p>\n<p>CustomMetadata \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0431\u0430\u0439\u0442. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0431\u0430\u0439\u0442 \u043e\u0442\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RemoteStorageManager.<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 CustomMetadata \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 copy\/fetch\/delete, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443? \u042d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c Remote Metadata Manager. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 CustomMetadata \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 remote.log.metadata.custom.metadata.max.bytes. <\/p>\n<p><a class=\"anchor\" name=\"6\" id=\"6\"><\/a><\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 RemoteStorageException \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f\u044b<\/h3>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f <code>RemoteStorageException<\/code> \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c.<\/p>\n<p>\u0418\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 <code>RemoteResourceNotFoundException<\/code> \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 (\u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0435). <\/p>\n<p><a class=\"anchor\" name=\"7\" id=\"7\"><\/a><\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata<\/h3>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438\u043c\u0435\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 RemoteSegmentMetadata. \u0422\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 RemoteLogMetadata. \u041a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 RemoteLogMetadata \u0438 RemoteSegmentMetadata.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">\u041f\u043e\u043b\u0435<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteLogMetadata<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">brokerId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">int<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">eventTimestampMs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u044d\u043f\u043e\u0445\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicIdPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>TopicIdPartition<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteSegmentMetadata<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">remoteLogSegmentId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>RemoteLogSegmentId<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">startOffset<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (offset) \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">endOffset<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (offset) \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">maxTimestampMs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">segmentLeaderEpochs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">NavigableMap &lt;Integer, Long&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u043f\u043e\u0445\u0438 \u043b\u0438\u0434\u0435\u0440\u0430 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">segmentSizeInBytes<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">customMetadata<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>Optional &lt;CustomMetadata&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 RemoteStorage Manager<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">state<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">RemoteLogSegmentState<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>TopicIdPartition<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">Uuid<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">TopicPartition<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>TopicPartition<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">partition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">int<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topic<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">String<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u043c\u044f \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">RemoteLogSegmentState<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">enum<br \/>COPY_SEGMENT_STARTED((byte) 0)<br \/>COPY_SEGMENT_FINISHED((byte) 1)<br \/>DELETE_SEGMENT_STARTED((byte) 2)<br \/>DELETE_SEGMENT_FINISHED((byte) 3)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteLogSegmentId<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicIdPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">TopicIdPartition<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">id <\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">Uuid<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0432 \u0431\u0430\u043a\u0435\u0442\u0430\u0445 S3 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u041a\u0430\u0444\u043a\u0438. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u0431\u043a\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449.<\/p>\n<p><a class=\"anchor\" name=\"8\" id=\"8\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData<\/h3>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 S3.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>Optional&lt;CustomMetadata&gt;<\/code>. \u0421 CustomMetadata \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0432 \u0440\u0430\u043d\u0435\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b CustomMetadata, \u0432\u0435\u0440\u043d\u0443\u0432 <code>Optional.empty()<\/code>. \u0418\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430 RemoteStorageException.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>remoteLogSegmentMetadata \u2014 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p>logSegmentData \u2014 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u0435 \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.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 LogSegmentData \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u043b\u044f:<\/p>\n<p>logSegment \u2013 actual log segment file  <br \/>offsetIndex \u2013 offset index file <br \/>timeIndex \u2013 time index file  <br \/>transactionIndex \u2013 transaction index file, which can be null  <br \/>producerSnapshotIndex \u2013 producer snapshot until this segment  <br \/>leaderEpochIndex \u2013 leader-epoch-index until this segment<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435 \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0443\u0442\u0435\u0439.<\/p>\n<p>\u0418\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u0440\u043e\u043c\u0435 transactionIndex \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435. \u0412 \u043a\u043b\u0430\u0441\u0441\u0435 LogSegmentData \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0435 \u043a\u0430\u043a \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443, \u0430 \u043a\u0430\u043a ByteBuffer. \u041c\u0435\u0436\u0434\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b leaderEpochIndex \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0441\u043b\u0435\u043f\u043e\u043a. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0444\u0430\u0439\u043b leaderEpochIndex \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u041e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0441\u043b\u0435\u043f\u043e\u043a leaderEpochIndex, \u0432\u0435\u0440\u043d\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 (\u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u043a\u0430 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443):<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p>\u2014 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043b\u043e\u0433\u0430 (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 log);<br \/>\u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 index);<br \/>\u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 timeindex);<br \/>\u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 producerSnapshot (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 snapshot);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 () \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 leaderEpochIndex \u0438\u0437 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u043f\u0443\u0442\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438 \u0441\u043b\u0435\u043f\u043a\u0430 leaderEpochIndex \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\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<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 fetch* \u0438 deleteLogSegment \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 CustomMetadata;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c RemoteStorageException.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438\/\u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0444\u0430\u0439\u043b\u043e\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \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;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 CustomMetadata.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"9\" id=\"9\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b fetchLogSegment<\/h3>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 <strong>\u0434\u0430\u043d\u043d\u044b\u0445<\/strong> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c int endPosition. <\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u0438\u043c\u0435\u044f \u0432 RemoteLogSegmentMetadata \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c. \u041b\u0438\u0431\u043e \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u2014 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. <\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e startPosition \u0438 endPosition \u044d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u043d\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u044f\u0434\u0440\u043e\u043c \u041a\u0430\u0444\u043a\u0438 \u0432 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Remote Storage Manager \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043e\u0431 \u0438\u0445 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c InputStream \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043e\u0431\u0449\u0435\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 RemoteStorageException. \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c RemoteResourceNotFoundException.<\/p>\n<p><a class=\"anchor\" name=\"10\" id=\"10\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434 fetchIndex<\/h3>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0442\u0438\u043f\u0443 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c InputStream \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0431\u0449\u0435\u0433\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 RemoteStorageException. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 RemoteResourceNotFoundException.<\/p>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0438 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 fetchIndex \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c indexType \u0440\u0430\u0432\u043d\u044b\u043c TRANSACTION. \u041b\u0438\u0431\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 RemoteResourceNotFoundException. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u00ab\u0432 \u043b\u043e\u0431\u00bb \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 404 notFound. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 CustomMetadata \u0432\u0438\u0434\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 \u0432\u0438\u0434\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 fetchIndex \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433\u0438 \u0438 \u0435\u0441\u043b\u0438 \u0432 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u0432 \u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 copyLogSegmentData, \u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e leader epoch index \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u044e. \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u043f\u043e\u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043b\u0435\u043f\u043e\u043a, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443.<\/p>\n<p><a class=\"anchor\" name=\"11\" id=\"11\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434 deleteLogSegmentData<\/h3>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>RemoteLogSegmentMetadata remoteLogSegmentMetadata<\/code>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442.<\/p>\n<p>\u041f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430: <code>RemoteStorageException<\/code>.<\/p>\n<p>\u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445) \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p><a class=\"anchor\" name=\"12\" id=\"12\"><\/a><\/p>\n<h2>\u041a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Aiven Open<\/h2>\n<p><a class=\"anchor\" name=\"13\" id=\"13\"><\/a><\/p>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043a\u043e\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439.<\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b \u0444\u0430\u0439\u043b\u0430 README.md \u0432 github Aiven Open.<\/p>\n<ol>\n<li>\n<p>\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 AWS S3, Google Cloud Storage \u0438 Azure Blob Storage (\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432 \u043c\u0438\u0440\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b S3);<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u041a\u0430\u0444\u043a\u0438 \u0438 remote storage;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u043e\u0436\u0435 \u043a\u0430\u043a \u043e\u043f\u0446\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0438\u0437\u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443 \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041d\u043e: <\/p>\n<ul>\n<li>\n<p>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435; <\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b Amazon \u0438\u0442\u0434 \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0440\u0443\u0434\u043d\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u0420\u0424;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u043e\u0431\u043b\u0430\u043a\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u043b\u0435\u0433\u043a\u0430 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u041a\u0430\u0444\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443 \u0441\u0436\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0442\u043a\u0435 \u0440\u0430\u0437\u0436\u0438\u043c\u0430\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u0434\u0438\u0441\u043a. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0449\u0435 \u0438 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b Remote Storage Manager \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<p>\u0422\u0440\u0435\u0442\u044c\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438.<\/p>\n<p>\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u044f\u043a\u043e. <br \/>\u041f\u0435\u0440\u0432\u0430\u044f \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0430 \u2014 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435.<br \/>\u0412\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0430 \u2014 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0442\u0430\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c\u044b\u043c (\u043f\u043b\u0430\u0442\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c) S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u0420\u0430\u0437\u0443\u043c\u043d\u043e, \u043d\u043e \u0432 on-premise \u0441\u0440\u0435\u0434\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Aiven Open \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u043a\u0430\u0445 \u0448\u0438\u0440\u043e\u043a\u0438\u043c \u043a\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043d\u0435 \u0420\u0424. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 Enterprise \u0418\u0422 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430\u0445 \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u043e-\u043f\u0440\u0430\u0432\u043e\u0432\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u00ab\u043f\u043e\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435\u00bb \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0417\u0430\u0442\u043e \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e (\u044d\u0442\u043e \u044f \u0437\u0430\u0431\u0435\u0433\u0430\u044e \u0432\u043f\u0435\u0440\u0435\u0434) \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0440\u0430 \u0443\u0436\u0435 \u043f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043a\u043e\u0434.<\/p>\n<p><a class=\"anchor\" name=\"14\" id=\"14\"><\/a><\/p>\n<h3>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0418 \u0441\u043d\u043e\u0432\u0430 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Aiven Open \u0437\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"15\" id=\"15\"><\/a><\/p>\n<h4>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 S3 (provider backends)<\/h4>\n<p>\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 S3 \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 S3 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c SDK, \u0430 \u043d\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f http \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <\/p>\n<p>SDK \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f, \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 http. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 S3 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 SDK. \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 S3 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443 \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 SDK, \u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434. \u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 S3 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u044f provider backends \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f.<\/p>\n<p><a class=\"anchor\" name=\"16\" id=\"16\"><\/a><\/p>\n<h4>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 (chunking)<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0432 \u041a\u0430\u0444\u043a\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0439. \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430. \u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u2014 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442. \u041a\u043b\u0438\u0435\u043d\u0442\u044b \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u0432 \u041a\u0430\u0444\u043a\u0430 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 (\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439).<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0438\u0437 local storage \u0431\u0440\u043e\u043a\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0431\u0440\u043e\u043a\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 http \u0432\u044b\u0437\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u00ab\u0432 \u043b\u043e\u0431\u00bb \u0438\u0437 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043f\u043e \u0441\u0435\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0434\u0430\u0436\u0435, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 S3 \u0443\u043c\u0435\u044e\u0442 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b, \u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u043d\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e http \u0432\u044b\u0437\u043e\u0432\u0430.<\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430. \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441.<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0431\u0430\u0439\u0442 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 S3 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0436\u0430\u0442\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 RemoteStorage \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440 \u0431\u0430\u0439\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0440\u0430\u0437\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0438 \u0440\u0430\u0437\u0436\u0430\u0442\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b.<\/p>\n<p>\u0427\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Aiven Open \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438? \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0432 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 (chunks). \u041a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c\/\u0441\u0436\u0430\u0442\u044c. \u0417\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u043d\u043e\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u043c\u0438 \u0431\u0430\u0439\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u041a\u0430\u0444\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 chunk-\u0430\u0445.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0436\u0430\u0442\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Remote Storage Manager \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b chunks \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0441\u0436\u0430\u0442\u0438\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 (chunks) \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0410 \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445? \u041f\u0440\u043e\u0432\u0435\u0440\u044e \u043f\u043e\u0437\u0436\u0435. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b chunks \u043d\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 Remote Storage Manager \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b.<\/p>\n<p><a class=\"anchor\" name=\"17\" id=\"17\"><\/a><\/p>\n<h4>\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Remote Storage Manager<\/h4>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c Zstandard. \u0421\u0436\u0430\u0442\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0438\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u044f\u0432\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u044f\u0432\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u041a\u0430\u0444\u043a\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u043a\u0440\u0443\u0442\u0430\u044f, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u043f\u0440\u043e\u0449\u0435 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442. <\/p>\n<p><a class=\"anchor\" name=\"18\" id=\"18\"><\/a><\/p>\n<h4>\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 AES-256 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0430\u043c \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 (\u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 RSA). \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0440\u043e\u0442\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u044e\u0447), \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0437\u043b\u043e\u043c\u0430\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043b\u044e\u0447, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043b\u044e\u0447 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab\u043e\u0442\u043c\u044b\u0447\u043a\u043e\u0439\u00bb \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0412\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043a\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 (key ring), \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u043e\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041d\u043e \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c TLS. \u0410 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0442\u0434\u0430\u0442\u044c \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p><a class=\"anchor\" name=\"19\" id=\"19\"><\/a><\/p>\n<h4>S3 Multipart Upload<\/h4>\n<p>S3 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u00ab\u0447\u0430\u0441\u0442\u044f\u043c\u0438\u00bb \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0412\u043f\u043e\u043b\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f. <\/p>\n<p><a class=\"anchor\" name=\"20\" id=\"20\"><\/a><\/p>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u044d\u0448 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 chunk \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u0434\u0435\u044f\u0441\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u041a\u0430\u0444\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u043f\u044f\u0442\u044c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 chunk. \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0432 \u0444\u043e\u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 chunk \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u044d\u0448 (prefetching). \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0432\u044b\u0441\u0438\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u041a\u0430\u0444\u043a\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u044d\u0448\u0430 \u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430 \u0438 \u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0433\u043e\u0434\u043d\u0430\u044f \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e chunk, \u0430 \u0444\u0430\u0439\u043b\u044b \u0441\u0435\u0433\u043c\u0435\u0442\u043d\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p><a class=\"anchor\" name=\"21\" id=\"21\"><\/a><\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/h3>\n<p><a class=\"anchor\" name=\"22\" id=\"22\"><\/a><\/p>\n<h4>\u041e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u043e, \u0430 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u2014 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435. \u0421\u043b\u0435\u0434\u0443\u044f \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 Remote Storage Manager Aiven Open.<\/p>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 github \u043a \u0441\u0435\u0431\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0439 gradle \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0432\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 make.<\/p>\n<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043e\u043a \u043a\u043e\u0434\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e.<\/p>\n<p>\u0427\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 Java \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u043e\u043b\u044c.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 checkstyle \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 Java \u043a\u043e\u0434\u0430. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 checkstyle \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043c\u0438\u0440\u0435 Java \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u043e\u0432, \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 gradle \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 gradle wrapper. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Gradle. \u041e\u043f\u044f\u0442\u044c \u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0433\u043e, \u0447\u0430\u0441\u0442\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438 Gradle.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 demo \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 docker compose \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 docker \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 e2e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 end to end \u0442\u0435\u0441\u0442\u043e\u0432. <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u043f\u0430\u043f\u043e\u043a \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u043c\u0441\u044f \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 commons \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 core \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u044f\u0434\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043f\u0430\u043f\u043a\u0430 storage \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 S3 (AWS, Google, Azure \u0438\u0442\u0434).<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"23\" id=\"23\"><\/a><\/p>\n<h4>\u0418\u0449\u0435\u043c \u0432\u0445\u043e\u0434<\/h4>\n<p>\u041b\u044e\u0431\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Kafka Remote Storage Manager \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: <code>org.apache.kafka.server.log.remote.storage.RemoteStorageManager.<\/code><\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 Aiven Open \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430: <code>org.apache.kafka.server.log.remote.storage.RemoteStorageManager<\/code> \u0432 gradle \u043c\u043e\u0434\u0443\u043b\u0435 core. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 RemoteStorageManager.<\/p>\n<p>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u043e\u0441\u0442. \u0412 \u043d\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 time \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c: <code>org.apache.kafka.common.utils.Time<\/code>. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u044f\u0434\u0440\u043e \u041a\u0430\u0444\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 configure. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a Remote Storage Manager, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0444\u0430\u0439\u043b server.properties). \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u041d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 java\/io\/aiven\/kafka\/tieredstorage\/config\/RemoteStorageManagerConfig.java. \u0412\u043e\u0442 \u043e\u043d, \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u0434\u0430\u0436\u0435 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0421\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0430\u0440\u0435\u0437\u043a\u0438 \u043d\u0430 chunk-\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 chunk-a. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u0438\u0431\u043a\u043e, \u0445\u043e\u0442\u044f \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0436\u0430\u0442\u0438\u044f.<\/p>\n<p>\u041f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u043c\u0435\u0442\u043e\u0434\u0430 configure \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 S3 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f backend-\u0443, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442: <\/p>\n<ol>\n<li>\n<p>uploader \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 S3;<\/p>\n<\/li>\n<li>\n<p>fetcher \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 S3; <\/p>\n<\/li>\n<li>\n<p>deleter \u2014 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 S3.<\/p>\n<\/li>\n<\/ol>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043e\u0431\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 S3.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0437\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 tiered remote storage.<\/p>\n<p><em>\u041a\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 S3 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/em><\/p>\n<p>\u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"java\">public Optional&lt;CustomMetadata&gt; copyLogSegmentData(     final RemoteLogSegmentMetadata remoteLogSegmentMetadata,     final LogSegmentData logSegmentData)     throws RemoteStorageException {          \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435 \u0440\u0430\u0432\u043d\u044b null.      \/\/ \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430     Objects.requireNonNull(remoteLogSegmentMetadata, \"remoteLogSegmentId must not be null\");     Objects.requireNonNull(logSegmentData, \"logSegmentData must not be null\");      \/\/ \u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u043b\u043e\u0433     log.info(\"Copying log segment data, metadata: {}\", remoteLogSegmentMetadata);      \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u0438\u043b\u0434\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f custom metadata     final var customMetadataBuilder =         new SegmentCustomMetadataBuilder(customMetadataFields, objectKeyFactory, remoteLogSegmentMetadata);      \/\/ \u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438     final long startedMs = time.milliseconds();          \/\/ \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0447\u0442\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430     try (final InputStream logSegmentInputStream = Files.newInputStream(logSegmentData.logSegment())) {         ... \u043f\u043e\u0440\u0435\u0437\u0430\u0442\u044c \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u0437\u0430\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0442\u0434          ...         \/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 remote storage         uploadSegmentLog(remoteLogSegmentMetadata, transformFinisher, customMetadataBuilder);         ...      }          final SegmentIndexesV1 segmentIndexes = uploadIndexes(                 remoteLogSegmentMetadata, logSegmentData, encryptionMetadata, customMetadataBuilder);                      \/\/ \u041c\u043c\u043c\u043c.. \u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043c\u0438\u043c\u043e customMetadata \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 \u0432 remoteStorage      final SegmentManifest segmentManifest = new SegmentManifestV1(                 chunkIndex, segmentIndexes, requiresCompression, encryptionMetadata, remoteLogSegmentMetadata);     uploadManifest(remoteLogSegmentMetadata, segmentManifest, customMetadataBuilder);     ...          metrics.recordSegmentCopyTime(             remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),             startedMs, time.milliseconds());      final var customMetadata = buildCustomMetadata(customMetadataBuilder);      log.info(\"Copying log segment data completed successfully, metadata: {}\", remoteLogSegmentMetadata);      return customMetadata;         }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0447\u0438\u0442\u0430\u0435\u043c, \u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u044b \u043c\u0435\u0436\u0434\u0443 customMetadata \u0438 uploadManifest \u0432 remote storage;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 customMetadata, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 upload;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0431\u043e\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043d\u044f\u0442\u043e RemoteStorageException \u0438 \u0432  remote storage \u043c\u043e\u0433\u0443\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u00ab\u0445\u0432\u043e\u0441\u0442\u044b\u00bb.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b uploadSegmentLog \u0438 uploadManifest \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 uploader \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 remote storage.<\/p>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 uploadIndexes \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u0432 \u0445\u043e\u0434\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440. \u0410\u043d\u0430\u043b\u0438\u0437 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430indexSize. <\/p>\n<pre><code class=\"java\">static int indexSize(final Path indexPath) throws RemoteStorageException {         try {             final var size = Files.size(indexPath);             if (size &gt; Integer.MAX_VALUE) {                 throw new IllegalStateException(                     \"Index at path \"                         + indexPath                         + \" has size larger than Integer.MAX_VALUE\");             }             return (int) size;         } catch (final IOException e) {             throw new RemoteStorageException(\"Error while getting index path size\", e);         }     } <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043e\u043b\u0435\u0435 Integer.MAX_VALUE \u0432\u044b\u0437\u043e\u0432\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c.<\/p>\n<p>\u0418\u0442\u043e\u0433: \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c.<\/p>\n<p><a class=\"anchor\" name=\"24\" id=\"24\"><\/a><\/p>\n<h4>\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/h4>\n<pre><code class=\"java\">    @Override     public InputStream fetchLogSegment(final RemoteLogSegmentMetadata remoteLogSegmentMetadata,                                        final int startPosition,                                        final int endPosition) throws RemoteStorageException {         ...         try {             ...             final var segmentManifest = fetchSegmentManifest(remoteLogSegmentMetadata);              final var suffix = ObjectKeyFactory.Suffix.LOG;             final var segmentKey = objectKey(remoteLogSegmentMetadata, suffix);             return new FetchChunkEnumeration(chunkManager, segmentKey, segmentManifest, range)                 .toInputStream();         }                                        }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 remote storage, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u043c\u0430\u0433\u0438\u0435\u0439 FetchChunkEnumeration \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0430\u0439\u0442. <\/p>\n<p>\u0418\u0442\u043e\u0433: \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a\u0430\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u043e \u043c\u0430\u0433\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"25\" id=\"25\"><\/a><\/p>\n<h4>\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h4>\n<pre><code class=\"java\">public InputStream fetchIndex(final RemoteLogSegmentMetadata remoteLogSegmentMetadata, final IndexType indexType) throws RemoteStorageException {     ...     return segmentIndexesCache.get(                 key,                 indexType,                 () -&gt; fetchIndexBytes(key, segmentIndex, segmentManifest)             ); }<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c\u043e, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u044d\u0448\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0445 \u0438\u0437 remote storage. <\/p>\n<p>\u0418\u0442\u043e\u0433: \u041a\u043e\u0434 \u043f\u043e\u043d\u044f\u0442\u0435\u043d.<\/p>\n<p><a class=\"anchor\" name=\"26\" id=\"26\"><\/a><\/p>\n<h4>\u041a\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 remote storage<\/h4>\n<pre><code class=\"java\">    @Override     public void deleteLogSegmentData(final RemoteLogSegmentMetadata remoteLogSegmentMetadata)         throws RemoteStorageException {          log.info(\"Deleting log segment data for {}\", remoteLogSegmentMetadata);          metrics.recordSegmentDelete(remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),             remoteLogSegmentMetadata.segmentSizeInBytes());          final long startedMs = time.milliseconds();          try {             final Set&lt;ObjectKey&gt; keys = Arrays.stream(ObjectKeyFactory.Suffix.values())                 .map(s -&gt; objectKeyFactory.key(remoteLogSegmentMetadata, s))                 .collect(Collectors.toSet());             deleter.delete(keys);         } catch (final Exception e) {             metrics.recordSegmentDeleteError(remoteLogSegmentMetadata.remoteLogSegmentId()                 .topicIdPartition().topicPartition());             throw new RemoteStorageException(e);         }          metrics.recordSegmentDeleteTime(             remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),             startedMs, time.milliseconds());          log.info(\"Deleting log segment data for completed successfully {}\", remoteLogSegmentMetadata);     }<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c `deleter.delete(keys)`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e S3 SDK.<\/p>\n<p>\u0418\u0442\u043e\u0433: \u043a\u043e\u0434 \u043f\u043e\u043d\u044f\u0442\u0435\u043d.<\/p>\n<p><a class=\"anchor\" name=\"27\" id=\"27\"><\/a><\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430, \u043a\u043e\u0434 \u0447\u0438\u0442\u0430\u0435\u043c, \u0445\u043e\u0442\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u043b\u043e\u0436\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u043e \u043a\u0442\u043e \u0438\u0437 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0438\u0448\u0435\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u0443\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u043a\u0438\u043d\u0435\u0442 \u043a\u0430\u043c\u0435\u043d\u044c.<\/p>\n<p><a class=\"anchor\" name=\"28\" id=\"28\"><\/a><\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e AivenOpen<\/h2>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u043d\u0430 Linux.<\/p>\n<p><a class=\"anchor\" name=\"29\" id=\"29\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Minio<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Minio. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 Minio \u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b Linux. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u043f\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u043f\u0443\u0442\u044c ~\/Projects\/kafka\/data\/aiven\/minio. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043d\u0430 \u0432\u0430\u0448 \u0432\u043a\u0443\u0441.<\/p>\n<p>\u0418\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Minio:<\/p>\n<pre><code class=\"bash\">minio server --console-address localhost:9999 ~\/Projects\/kafka\/data\/aiven\/minio<\/code><\/pre>\n<p>\u0412 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 http:\/\/localhost:9999 \u0438 \u0432\u0438\u0434\u0438\u043c web \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Minio.<\/p>\n<p>\u041b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u0441 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0430\u0434\u043c\u0438\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e minioadmin\/minioadmin. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0432 \u0446\u0435\u043b\u044f\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0412 web \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c S3 bucket \u0441 \u0438\u043c\u0435\u043d\u0435\u043c kafka-bucket \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 AWS S3 client \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f S3 region \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0412 web \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e Configuration \u0438 \u0437\u0430\u0434\u0430\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Region\/Server Location \u0440\u0430\u0432\u043d\u043e\u0439 local-ru (\u0438\u043c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435).<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Minio \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p><a class=\"anchor\" name=\"30\" id=\"30\"><\/a><\/p>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 AivenOpen<\/h3>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u0441 github \u0438 \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 `make` \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443. \u041f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u043e\u0434 &#171;BUILD SUCCESSFUL&#187;.<\/p>\n<p><a class=\"anchor\" name=\"31\" id=\"31\"><\/a><\/p>\n<h3>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 AivenOpen \u0432 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e Apache Kafka<\/h3>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Minio \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 Amazon S3 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 AivenOpen \u0432 \u043f\u0430\u043f\u043a\u0443 libs \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u041a\u0430\u0444\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<ul>\n<li>\n<p>\u0418\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 (zip \u0438\u043b\u0438 tar \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u0438\u0446\u044b) .\/build\/distributions\/ \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e jar \u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0430\u043f\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0440\u0445\u0438\u0432\u0430. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 jar \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 libs;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 (zip \u0438\u043b\u0438 tar \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u0438\u0446\u044b) .\/storage\/s3\/build\/distributions \u0432\u0441\u0435 jar \u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0430\u043f\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0440\u0445\u0438\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"32\" id=\"32\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430<\/h3>\n<ol>\n<li>\n<p>Zookeeper \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0417\u0430\u043f\u0443\u0441\u043a Zookeeper \u0442\u043e\u0436\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439: <\/p>\n<p><code>.\/bin\/zookeeper-server-start.sh -daemon .\/config\/zookeeper.properties<\/code><\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u0431\u0440\u043e\u043a\u0435\u0440 \u041a\u0430\u0444\u043a\u0430. \u0412 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430 .\/config\/server\/properties \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u041a\u0430\u0444\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"bash\"># ----- Enable tiered storage -----  remote.log.storage.system.enable=true  # ----- Configure the remote log manager -----  # This is the default, but adding it for explicitness: remote.log.metadata.manager.class.name=org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager  # Put the real listener name you'd like to you here: remote.log.metadata.manager.listener.name=PLAINTEXT  # You may need to set this if you're experimenting with a single broker setup: rlmm.config.remote.log.metadata.topic.replication.factor=1 rlmm.config.remote.log.metadata.topic.num.partitions=1   # ----- Configure the remote storage manager -----  # Here you need either one or two directories depending on what you did in Step 1: remote.log.storage.manager.class.name=io.aiven.kafka.tieredstorage.RemoteStorageManager  # 4 MiB is the current recommended chunk size: rsm.config.chunk.size=4194304  # ----- Configure the storage backend -----  # Using S3 as an example: rsm.config.storage.backend.class=io.aiven.kafka.tieredstorage.storage.s3.S3Storage rsm.config.storage.s3.bucket.name=kafka-bucket rsm.config.storage.s3.region=local-ru rsm.config.storage.s3.endpoint.url=http:\/\/localhost:9000 rsm.config.storage.s3.path.style.access.enabled=true # default minio server login\/password. Change it. rsm.config.storage.aws.access.key.id=minioadmin rsm.config.storage.aws.secret.access.key=minioadmin  # The prefix can be skipped: #rsm.config.storage.key.prefix: \"some\/prefix\/\"  # ----- Configure the fetch chunk cache -----  rsm.config.fetch.chunk.cache.class=io.aiven.kafka.tieredstorage.fetch.cache.DiskChunkCache # S3 local cache folder path. Change it. rsm.config.fetch.chunk.cache.path=\/home\/mike\/Projects\/kafka\/data\/aiven\/s3_cache # Pick some cache size, 16 GiB here: rsm.config.fetch.chunk.cache.size=17179869184 # Prefetching size, 16 MiB here: rsm.config.fetch.chunk.cache.prefetch.max.size=16777216<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 <code>rsm.config.storage.s3.region<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 <code>rsm.config.storage.s3.path.style.access.enabled<\/code> \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 AWS S3, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0445\u043e\u0441\u0442\u0430 (\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u0430 \u0432 url path (\u0432 \u0442\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 Minio \u043e\u0436\u0438\u0434\u0430\u0435\u0442 HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432).<\/p>\n<p>\u0421\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0431\u0440\u043e\u043a\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code class=\"bash\">.\/bin\/kafka-server-start.sh -daemon .\/config\/server.properties<\/code><\/pre>\n<p>\u0411\u0440\u043e\u043a\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c. \u0412 \u043b\u043e\u0433\u0430\u0445  \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p><a class=\"anchor\" name=\"33\" id=\"33\"><\/a><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 remote storage<\/h3>\n<p>\u0418\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">bin\/kafka-topics.sh --bootstrap-server localhost:9092 \\     --create --topic topic1 \\     --config remote.storage.enable=true \\     --config segment.bytes=512000 \\     --config local.retention.bytes=1 \\     --config retention.bytes=10000000000000<\/code><\/pre>\n<p><a class=\"anchor\" name=\"34\" id=\"34\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043f\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">bin\/kafka-producer-perf-test.sh \\     --topic topic1 --num-records=10000 --throughput -1 --record-size 1000 \\     --producer-props acks=1 batch.size=16384 bootstrap.servers=localhost:9092<\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e web \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Minio, \u0447\u0442\u043e \u0432 S3 bucket \u0441 \u0438\u043c\u0435\u043d\u0435\u043c kafka-bucket \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p><a class=\"anchor\" name=\"35\" id=\"35\"><\/a><\/p>\n<h2>\u041e\u0441\u043c\u044b\u0441\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h2>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RemoteStorageManager \u043e\u0442 AivenOpen.<\/p>\n<p>\u0427\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f. \u041d\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043c\u0435\u043d\u043d\u043e RemoteStorageManager, \u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434) \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0444\u0438\u0447. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 remote storage \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u043e\u043a\u0435\u0440\u043e\u043c \u041a\u0430\u0444\u043a\u0430. <\/p>\n<ul>\n<li>\n<p>\u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438\u0437 Minio \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u041a\u0430\u0444\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u00ab\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 RemoteStorageManager \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043c\u044b\u0441\u043b\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e RemoteStorageManager. \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<\/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\/823238\/\"> https:\/\/habr.com\/ru\/articles\/823238\/<\/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 <strong>\u041c\u0438\u0445\u0430\u0438\u043b \u0413\u043e\u043b\u043e\u0432\u0430\u043d\u043e\u0432<\/strong>. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 tiered storage \u0432 Apache Kafka. \u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u00ab<a href=\"https:\/\/habr.com\/ru\/articles\/773374\/\">\u041f\u0440\u0438\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a Kafka tiered storage<\/a>\u00bb. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0447\u0438\u043d\u0438\u043c, \u0447\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0440\u0430\u043d\u0435\u0435 (\u0441\u0431\u043e\u0440\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 AivenOpen) \u0438 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f Minio S3 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0435\u043a\u044d\u043d\u0434\u0430. \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0442\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>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"#1\">Kafka \u0432 \u0412\u0422\u0411<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#2\">\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\">\u0427\u0438\u043d\u0438\u043c e2e \u0442\u0435\u0441\u0442\u044b \u0432 Aiven Open<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\">Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430<\/a><br \/>\u2022 <a href=\"#5\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CustomMetadata<\/a><br \/>\u2022 <a href=\"#6\">\u041a\u043b\u0430\u0441\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 RemoteStorageException \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f\u044b<\/a><br \/>\u2022 <a href=\"#7\">\u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata<\/a><br \/>\u2022 <a href=\"#8\">\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData<\/a><br \/>\u2022 <a href=\"#9\">\u041c\u0435\u0442\u043e\u0434\u044b fetchLogSegment<\/a><br \/>\u2022 <a href=\"#10\">\u041c\u0435\u0442\u043e\u0434 fetchIndex<\/a><br \/>\u2022 <a href=\"#11\">\u041c\u0435\u0442\u043e\u0434 deleteLogSegmentData<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#12\">\u041a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Aiven Open<\/a><br \/>\u2022 <a href=\"#13\">\u0410\u043d\u0430\u043b\u0438\u0437 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439<\/a><br \/>\u2022 <a href=\"#14\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a><br \/>  \u2014 <a href=\"#15\">\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 S3 (provider backends)<\/a><br \/>  \u2014 <a href=\"#16\">\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 (chunking)<\/a><br \/>  \u2014 <a href=\"#17\">\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Remote Storage Manager<\/a><br \/>  \u2014 <a href=\"#18\">\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><br \/>  \u2014 <a href=\"#19\">S3 Multipart Upload<\/a><br \/>  \u2014 <a href=\"#20\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u044d\u0448 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><br \/>\u2022 <a href=\"#21\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/a><br \/>  \u2014 <a href=\"#22\">\u041e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438<\/a><br \/>  \u2014 <a href=\"#23\">\u0418\u0449\u0435\u043c \u0432\u0445\u043e\u0434<\/a><br \/>  \u2014 <a href=\"#24\">\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/a><br \/>  \u2014 <a href=\"#25\">\u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><br \/>  \u2014 <a href=\"#26\">\u041a\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 remote storage<\/a><br \/>\u2022 <a href=\"#27\">\u0412\u044b\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#28\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e AivenOpen<\/a><br \/>\u2022 <a href=\"#29\">\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Minio<\/a><br \/>\u2022 <a href=\"#30\">\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 AivenOpen<\/a><br \/>\u2022 <a href=\"#31\">\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 AivenOpen \u0432 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e Apache Kafka<\/a><br \/>\u2022 <a href=\"#32\">\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430<\/a><br \/>\u2022 <a href=\"#33\">\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043f\u0438\u043a \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 remote storage<\/a><br \/>\u2022 <a href=\"#34\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#35\">\u041e\u0441\u043c\u044b\u0441\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2>Kafka \u0432 \u0412\u0422\u0411<\/h2>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0432 \u0431\u0430\u043d\u043a\u0435 \u0412\u0422\u0411 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u0442\u0440\u0438\u043c\u0430 \u00ab\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u00bb, \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0438 \u0434\u0435\u0448\u0435\u0432\u043e (\u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430).<\/p>\n<p>\u041a\u0430\u0444\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0430\u043d\u043a\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0435\u0445 \u043b\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c Publish-Subscribe \u0438 Streaming. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e \u0443\u0436\u0435 \u043e\u043a\u043e\u043b\u043e 250 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u041b\u044e\u0431\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u0430\u043d\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043f\u0430\u0440\u044b \u043a\u043b\u0430\u0432\u0438\u0448 \u0437\u0430 10 \u043c\u0438\u043d\u0443\u0442  \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u041a\u0430\u0444\u043a\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0433\u0435\u043e\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c,  \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u0442.\u0434. \u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044e \u2014 \u00ab\u043a\u043e\u043c\u043c\u0443\u043d\u0430\u043b\u044c\u043d\u0443\u044e\u00bb \u041a\u0430\u0444\u043a\u0443.<\/p>\n<p>\u0414\u0440\u0443\u0436\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u041a\u0430\u0444\u043a\u0443 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u0438\u0434\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0438 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0432 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438.  <\/p>\n<p>\u0421\u043a\u0443\u0447\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0433\u0434\u0430. <\/p>\n<p>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0436\u0430\u0440\u043a\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f\u043c\u0438. \u0427\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u043a \u043d\u0430\u043c \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0433\u043e\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0441 \u0438\u0434\u0435\u044f\u043c\u0438 \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 (\u00ab\u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0432\u0436\u0443\u0445 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u00bb). \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0436\u0443\u0445 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043e\u043d\u043e \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0441 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u0444\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0412\u0422\u0411. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Istio ServiceMesh, Apache ActiveMQ, RabbitMQ, \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430.  <\/p>\n<p>\u041f\u0440\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437. \u0410 \u043f\u043e\u043a\u0430 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0438\u0442\u043e\u0433\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<ul>\n<li>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Kafka tiered remote storage;<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Remote Storage Manager \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 Apache Kafka;<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Remote Storage Manager \u043e\u0442 Aiven Open \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u0430. E2e \u0442\u0435\u0441\u0442\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0438\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b;<\/p>\n<\/li>\n<li>\n<p>==&gt; \u041c\u044b \u0442\u0443\u0442;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0447\u0438\u043d\u043a\u0430 e2e \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u0434\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Remote Storage Manager \u043e\u0442 Aiven Open;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u043b\u0430\u043d\u044b.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c e2e \u0442\u0435\u0441\u0442\u044b \u0432 Aiven Open<\/h2>\n<p>\u0412\u0441\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432  \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 .\/gradlew clean build. E2e \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0438\u0441\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043c\u043d\u043e\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 make. \u041f\u0430\u0440\u0430 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0432\u0441\u0435 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c, \u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0431\u043e\u0440\u043a\u0430 java \u043a\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 make \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 17 JDK. \u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 JDK 21 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439.<\/p>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<h2>Remote Storage Manager \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430<\/h2>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Remote Storage Manager \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: <code>org.apache.kafka.server.log.remote.storage.RemoteStorageManager<\/code>.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 Apache Kafka \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u0432: copyLogSegmentData, \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 fetchLogSegment (\u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c), fetchIndex \u0438 deleteLogSegmentData.<\/p>\n<p>\u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"java\">Optional&lt;CustomMetadata&gt; copyLogSegmentData(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,   LogSegmentData logSegmentData)    throws RemoteStorageException;  InputStream fetchLogSegment(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,   int startPosition)    throws RemoteStorageException;  InputStream fetchIndex(   RemoteLogSegmentMetadata remoteLogSegmentMetadata,    IndexType indexType)    throws RemoteStorageException;  void deleteLogSegmentData(   RemoteLogSegmentMetadata remoteLogSegmentMetadata)    throws RemoteStorageException;<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435. \u0414\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 fetchLogSegment \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (range).<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 fetchIndex \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 deleteLogSegmentData \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e CRUD \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.<\/p>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CustomMetadata            <\/h3>\n<p>\u0412 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 copyLogSegmentData \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0438\u043f CustomMetadata. \u042d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \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, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0437\u0430\u0434.<\/p>\n<p>CustomMetadata \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0431\u0430\u0439\u0442. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0431\u0430\u0439\u0442 \u043e\u0442\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0442\u043a\u0443\u043f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 RemoteStorageManager.<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 CustomMetadata \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 copy\/fetch\/delete, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443? \u042d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c Remote Metadata Manager. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 CustomMetadata \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 remote.log.metadata.custom.metadata.max.bytes. <\/p>\n<p><a class=\"anchor\" name=\"6\" id=\"6\"><\/a><\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 RemoteStorageException \u0438 \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f\u044b<\/h3>\n<p>\u0418\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f <code>RemoteStorageException<\/code> \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c.<\/p>\n<p>\u0418\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 <code>RemoteResourceNotFoundException<\/code> \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 (\u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0435). <\/p>\n<p><a class=\"anchor\" name=\"7\" id=\"7\"><\/a><\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata<\/h3>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438\u043c\u0435\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 RemoteSegmentMetadata. \u0422\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u041a\u043b\u0430\u0441\u0441 RemoteSegmentMetadata \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 RemoteLogMetadata. \u041a\u043b\u0430\u0441\u0441\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 RemoteLogMetadata \u0438 RemoteSegmentMetadata.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">\u041f\u043e\u043b\u0435<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteLogMetadata<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">brokerId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">int<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">eventTimestampMs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u044d\u043f\u043e\u0445\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicIdPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>TopicIdPartition<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteSegmentMetadata<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">remoteLogSegmentId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>RemoteLogSegmentId<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">startOffset<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (offset) \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">endOffset<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 (offset) \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">maxTimestampMs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">segmentLeaderEpochs<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">NavigableMap &lt;Integer, Long&gt;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u043f\u043e\u0445\u0438 \u043b\u0438\u0434\u0435\u0440\u0430 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">segmentSizeInBytes<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">long<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">customMetadata<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\"><code>Optional &lt;CustomMetadata&gt;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 RemoteStorage Manager<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">state<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">RemoteLogSegmentState<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>TopicIdPartition<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicId<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">Uuid<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">TopicPartition<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>TopicPartition<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">partition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">int<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topic<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">String<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u043c\u044f \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">RemoteLogSegmentState<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">enum<br \/>COPY_SEGMENT_STARTED((byte) 0)<br \/>COPY_SEGMENT_FINISHED((byte) 1)<br \/>DELETE_SEGMENT_STARTED((byte) 2)<br \/>DELETE_SEGMENT_FINISHED((byte) 3)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"3\" data-colwidth=\"177,202,0\" width=\"177\">\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 <strong><em>RemoteLogSegmentId<\/em><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">topicIdPartition<\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">TopicIdPartition<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"177\" width=\"177\">\n<p align=\"left\">id <\/p>\n<\/td>\n<td data-colwidth=\"202\" width=\"202\">\n<p align=\"left\">Uuid<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u0442\u043e\u043f\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0432 \u0431\u0430\u043a\u0435\u0442\u0430\u0445 S3 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u041a\u0430\u0444\u043a\u0438. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u0431\u043a\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449.<\/p>\n<p><a class=\"anchor\" name=\"8\" id=\"8\"><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434 copyLogSegmentData<\/h3>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u041a\u0430\u0444\u043a\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 S3.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>Optional&lt;CustomMetadata&gt;<\/code>. \u0421 CustomMetadata \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0432 \u0440\u0430\u043d\u0435\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b CustomMetadata, \u0432\u0435\u0440\u043d\u0443\u0432 <code>Optional.empty()<\/code>. \u0418\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430 RemoteStorageException.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>remoteLogSegmentMetadata \u2014 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p>logSegmentData \u2014 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u0435 \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.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043b\u0430\u0441\u0441 LogSegmentData \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043f\u043e\u043b\u044f:<\/p>\n<p>logSegment \u2013 actual log segment file  <br \/>offsetIndex \u2013 offset index file <br \/>timeIndex \u2013 time index file  <br \/>transactionIndex \u2013 transaction index file, which can be null  <br \/>producerSnapshotIndex \u2013 producer snapshot until this segment  <br \/>leaderEpochIndex \u2013 leader-epoch-index until this segment<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435 \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0443\u0442\u0435\u0439.<\/p>\n<p>\u0418\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u0440\u043e\u043c\u0435 transactionIndex \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. <\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u043e<\/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-427275","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427275","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=427275"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427275\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=427275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=427275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=427275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}