{"id":10021375,"date":"2026-06-01T02:44:11","date_gmt":"2026-05-31T18:44:11","guid":{"rendered":"https:\/\/itmax.cn\/?p=10021375"},"modified":"2026-06-01T02:44:11","modified_gmt":"2026-05-31T18:44:11","slug":"horizonvault-%e6%8a%80%e6%9c%af%e6%b7%b1%e6%bd%9c%ef%bc%9a%e5%a6%82%e4%bd%95%e5%9c%a8-hdd-%e4%b8%8a%e5%81%9a%e5%87%ba-100gb-s-%e7%ba%a7%e5%a4%a7%e5%90%9e%e5%90%90%e5%88%86%e5%b8%83%e5%bc%8f%e5%ad%98","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10021375","title":{"rendered":"HorizonVault \u6280\u672f\u6df1\u6f5c\uff1a\u5982\u4f55\u5728 HDD \u4e0a\u505a\u51fa 100GB\/s+ \u7ea7\u5927\u541e\u5410\u5206\u5e03\u5f0f\u5b58\u50a8\uff5c\u5f97\u7269\u6280\u672f"},"content":{"rendered":"<p>HorizonVault \u662f\u4e2d\u95f4\u4ef6\u56e2\u961f\u81ea\u7814\u7684\u4e00\u6b3e\u9ad8\u541e\u5410\u5206\u5e03\u5f0f\u5b58\u50a8\u5f15\u64ce\uff0c\u4e3b\u8981\u9762\u5411 Kafka \u8fdc\u7a0b\u5b58\u50a8\u3001\u51b7\/\u6e29\u6570\u636e\u4e0b\u6c89\u548c\u5927\u5bb9\u91cf\u4f4e\u6210\u672c\u5b58\u50a8\u573a\u666f\u3002\u968f\u7740 Kafka \u96c6\u7fa4\u6570\u636e\u89c4\u6a21\u6301\u7eed\u589e\u957f\uff0c\u672c\u5730\u9ad8\u6027\u80fd\u78c1\u76d8\u5f88\u96be\u65e0\u9650\u6269\u5f20\uff0cHorizonVault \u9700\u8981\u628a\u5927\u91cf\u5386\u53f2\u6570\u636e\u7a33\u5b9a\u3001\u53ef\u6062\u590d\u3001\u53ef\u6cbb\u7406\u5730\u8fc1\u79fb\u5230\u8fdc\u7aef\u5b58\u50a8\uff0c\u540c\u65f6\u7ef4\u6301\u8db3\u591f\u9ad8\u7684\u5199\u5165\u541e\u5410\u548c\u53ef\u63a7\u7684\u8bfb\u5199\u5ef6\u8fdf\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798839\" alt=\"\" title=\"\"><\/p>\n<p>\u968f\u7740\u4e1a\u52a1\u6d41\u91cf\u6301\u7eed\u589e\u957f\uff0cKafka \u9ad8\u6027\u80fd\u672c\u5730\u78c1\u76d8\u4f1a\u9762\u4e34\u8d8a\u6765\u8d8a\u9ad8\u7684\u5bb9\u91cf\u548c\u6210\u672c\u538b\u529b\u3002\u8fdc\u7a0b\u5b58\u50a8\u53ef\u4ee5\u7f13\u89e3\u5bb9\u91cf\u538b\u529b\uff0c\u4f46\u5982\u679c\u8fdc\u7aef\u7cfb\u7edf\u5199\u5165\u6162\u3001\u6296\u52a8\u5927\u3001\u6062\u590d\u5f31\uff0c\u6210\u672c\u95ee\u9898\u5f88\u5feb\u4f1a\u53d8\u6210\u7a33\u5b9a\u6027\u95ee\u9898\u3002HorizonVault \u7684\u65b9\u5411\uff0c\u662f\u7528\u901a\u7528\u5927\u5bb9\u91cf HDD \u627f\u63a5\u51b7\/\u6e29\u6570\u636e\uff0c\u901a\u8fc7\u5206\u5e03\u5f0f\u5e76\u884c\u5199\u5165\u644a\u8584\u5355\u76d8\u80fd\u529b\u4e0a\u9650\uff0c\u518d\u7528\u987a\u5e8f\u8ffd\u52a0\u3001\u78c1\u76d8\u9694\u79bb\u3001\u72b6\u6001\u611f\u77e5\u8c03\u5ea6\u548c\u526f\u672c\u540c\u6b65\uff0c\u628a HDD \u7684\u968f\u673a I\/O \u77ed\u677f\u63a7\u5236\u5728\u7cfb\u7edf\u53ef\u4ee5\u7ba1\u7406\u7684\u8303\u56f4\u5185\u3002<\/p>\n<p>\u4ece\u7cfb\u7edf\u5f62\u6001\u770b\uff0cHorizonVault \u66f4\u50cf\u4e00\u5957\u5b8c\u6574\u7684\u6570\u636e\u57fa\u7840\u8bbe\u65bd\u3002Broker \u627f\u63a5\u5ba2\u6237\u7aef\u8bfb\u5199\uff0cMeta \u7ef4\u62a4\u5168\u5c40\u8d44\u6e90\u89c6\u56fe\uff0cStore \u771f\u6b63\u8d1f\u8d23\u843d\u76d8\uff0c\u5e76\u6309\u78c1\u76d8\u3001\u5206\u533a\u3001\u526f\u672c\u548c\u65e5\u5fd7\u6bb5\u7ec4\u7ec7\u6570\u636e\u3002HA \u94fe\u8def\u8d1f\u8d23 leader\/follower \u590d\u5236\uff0c\u7f51\u7edc\u5c42\u8d1f\u8d23\u9ad8\u5e76\u53d1\u4e0b\u7684\u8d85\u65f6\u3001\u80cc\u538b\u548c\u5f02\u6b65\u5904\u7406\u3002\u8fd9\u4e9b\u673a\u5236\u5171\u540c\u6784\u6210\u4e86\u4e00\u6761\u5b8c\u6574\u7684\u5199\u5165\u548c\u6cbb\u7406\u94fe\u8def\uff0c\u4e5f\u6784\u6210\u4e86 HorizonVault \u6700\u91cd\u8981\u7684\u7cfb\u7edf\u4ef7\u503c\u3002<\/p>\n<p>\u5982\u679c\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\uff1aHorizonVault \u628a\u201c\u5199\u4e00\u4e2a\u6587\u4ef6\u201d\u53d8\u6210\u4e86\u201c\u57fa\u4e8e\u96c6\u7fa4\u8d44\u6e90\u72b6\u6001\u3001\u78c1\u76d8\u6c34\u4f4d\u3001\u7ebf\u7a0b\u9694\u79bb\u3001\u7f51\u7edc\u80cc\u538b\u548c\u526f\u672c\u540c\u6b65\u8fdb\u5ea6\u5171\u540c\u51b3\u7b56\u7684\u4e00\u6b21\u5206\u5e03\u5f0f\u8c03\u5ea6\u201d\u3002Kafka \u81ea\u8eab\u975e\u5e38\u64c5\u957f\u627f\u63a5\u70ed\u6570\u636e\u8bfb\u5199\uff0c\u4f46\u5f53\u4fdd\u7559\u5468\u671f\u53d8\u957f\u3001topic \u6570\u91cf\u589e\u591a\u3001\u5206\u533a\u526f\u672c\u89c4\u6a21\u6269\u5927\u65f6\uff0c\u672c\u5730\u78c1\u76d8\u4f1a\u6210\u4e3a\u6210\u672c\u548c\u5bb9\u91cf\u7684\u53cc\u91cd\u538b\u529b\u70b9\u3002Tiered Storage \u7684\u601d\u8def\uff0c\u662f\u628a\u70ed\u6570\u636e\u7ee7\u7eed\u7559\u5728 Kafka \u672c\u5730\uff0c\u628a\u8f83\u51b7\u7684\u6570\u636e\u4e0b\u6c89\u5230\u8fdc\u7aef\u5b58\u50a8\u3002\u8fd9\u4e2a\u65b9\u5411\u770b\u8d77\u6765\u7b80\u5355\uff0c\u771f\u6b63\u843d\u5730\u65f6\u5374\u4f1a\u9047\u5230\u4e09\u4e2a\u786c\u95ee\u9898\u3002<\/p>\n<ul>\n<li>\u7b2c\u4e00\u4e2a\u95ee\u9898\u662f\u541e\u5410\u3002Kafka \u4e0b\u6c89 segment \u65f6\uff0c\u4f1a\u6301\u7eed\u4ea7\u751f\u4e00\u6279\u6279\u5927\u5bf9\u8c61\u3002\u5982\u679c\u8fdc\u7aef\u5b58\u50a8\u65e0\u6cd5\u5403\u4e0b\u6301\u7eed\u5199\u5165\uff0cKafka \u672c\u5730\u78c1\u76d8\u91ca\u653e\u5c31\u4f1a\u8ddf\u4e0d\u4e0a\uff0c\u6700\u7ec8\u8fd8\u662f\u56de\u5230\u5bb9\u91cf\u538b\u529b\u3002<\/li>\n<li>\u7b2c\u4e8c\u4e2a\u95ee\u9898\u662f\u6296\u52a8\u3002HDD \u7684\u5e73\u5747\u987a\u5e8f\u541e\u5410\u5e76\u4e0d\u5dee\uff0c\u4f46\u5b83\u6015\u968f\u673a I\/O\uff0c\u6015\u961f\u5217\u5806\u79ef\uff0c\u6015\u67d0\u5757\u76d8\u7a81\u7136\u53d8\u6162\u3002\u4e00\u5757\u6162\u76d8\u5982\u679c\u6ca1\u6709\u88ab\u53ca\u65f6\u9694\u79bb\uff0c\u5f71\u54cd\u4f1a\u4ece\u5355\u76d8\u6269\u6563\u5230 Broker \u8def\u7531\u3001Store \u5199\u7ebf\u7a0b\u3001\u7f51\u7edc\u8fde\u63a5\u548c\u4e0a\u5c42\u8bf7\u6c42\u5ef6\u8fdf\u3002<\/li>\n<li>\u7b2c\u4e09\u4e2a\u95ee\u9898\u662f\u6062\u590d\u3002\u8fdc\u7aef\u5b58\u50a8\u4e0d\u80fd\u53ea\u662f\u201c\u5199\u8fdb\u53bb\u201d\uff0c\u8fd8\u8981\u80fd\u5728\u8282\u70b9\u91cd\u542f\u3001\u78c1\u76d8\u72b6\u6001\u53d8\u5316\u3001leader\/follower \u5207\u6362\u4e4b\u540e\u6062\u590d\u4e00\u81f4\u7684\u72b6\u6001\u3002\u5426\u5219\u51b7\u6570\u636e\u4e00\u65e6\u6210\u4e3a\u4e8b\u6545\u73b0\u573a\uff0cKafka \u964d\u672c\u53cd\u800c\u4f1a\u5f15\u5165\u65b0\u7684\u53ef\u9760\u6027\u98ce\u9669\u3002<\/li>\n<\/ul>\n<p>HorizonVault \u7684\u8bbe\u8ba1\u76ee\u6807\u5c31\u662f\u56f4\u7ed5\u8fd9\u4e09\u4e2a\u95ee\u9898\u5c55\u5f00\uff1a\u628a Kafka \u8fdc\u7a0b\u5199\u5165\u6539\u9020\u6210\u9002\u5408 HDD \u7684\u5927\u5757\u987a\u5e8f\u8ffd\u52a0\uff0c\u628a\u591a\u8282\u70b9\u591a\u78c1\u76d8\u7684\u5e76\u884c\u5ea6\u771f\u6b63\u7528\u8d77\u6765\uff0c\u540c\u65f6\u628a\u6162\u76d8\u3001\u6162\u526f\u672c\u3001\u6162\u8bf7\u6c42\u90fd\u6536\u655b\u5728\u5c40\u90e8\u3002\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48 HorizonVault \u6ca1\u6709\u628a HDD \u5f53\u4f5c\u666e\u901a\u6302\u8f7d\u76ee\u5f55\u6765\u7528\u3002\u5b83\u628a\u78c1\u76d8\u63d0\u5347\u6210\u4e86\u7cfb\u7edf\u7684\u4e00\u7b49\u8d44\u6e90\uff1a\u6709\u72b6\u6001\u3001\u6709\u6c34\u4f4d\u3001\u6709\u7ebf\u7a0b\u3001\u6709\u7f13\u5b58\u3001\u6709\u9694\u79bb\uff0c\u4e5f\u4f1a\u88ab Meta \u7eb3\u5165\u5168\u5c40\u8d44\u6e90\u8c03\u5ea6\u3002\u53ea\u6709\u8fd9\u6837\uff0c\u901a\u7528 HDD \u624d\u80fd\u4ece\u201c\u5bb9\u91cf\u4ecb\u8d28\u201d\u53d8\u6210\u4e00\u5957\u53ef\u627f\u8f7d\u9ad8\u541e\u5410\u5199\u5165\u7684\u8d44\u6e90\u6c60\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798840\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h2>\u4e00\u3001\u6027\u80fd\u4e3b\u7ebf\u4e0e\u6574\u4f53\u67b6\u6784\uff1a\u8ba9\u6d41\u91cf\u6253\u51c6\u3001\u8ba9\u6570\u636e\u5199\u7a33<\/h2>\n<p>\u8ba8\u8bba HorizonVault \u7684\u6027\u80fd\uff0c\u9700\u8981\u628a Netty\u3001\u5206\u533a\u3001\u526f\u672c\u8fd9\u4e9b\u7ec4\u4ef6\u653e\u56de\u5b8c\u6574\u7684\u6570\u636e\u94fe\u8def\u91cc\u770b\u3002\u5355\u4e2a\u7ec4\u4ef6\u53ea\u80fd\u89e3\u91ca\u5c40\u90e8\u80fd\u529b\uff0c100GB\/s+ \u7ea7\u522b\u7684\u96c6\u7fa4\u541e\u5410\u6765\u81ea\u987a\u5e8f\u5199\u3001\u591a\u76d8\u5e76\u884c\u548c\u72b6\u6001\u611f\u77e5\u8c03\u5ea6\u7684\u7ec4\u5408\u3002\u6574\u4f53\u6027\u80fd\u903b\u8f91\u66f4\u63a5\u8fd1\u4e0b\u9762\u8fd9\u4e2a\u516c\u5f0f\uff1a<\/p>\n<pre><code>\u96c6\u7fa4\u5199\u5165\u541e\u5410\n = \u5355\u76d8\u53ef\u6301\u7eed\u987a\u5e8f\u5199\u541e\u5410&amp;nbsp;\n x \u5355\u8282\u70b9\u53ef\u7528\u78c1\u76d8\u6570&amp;nbsp; \n x \u53ef\u5e76\u884c\u5199\u5165\u8282\u70b9\u6570&amp;nbsp; \n x \u8def\u7531\u548c\u9694\u79bb\u673a\u5236\u5e26\u6765\u7684\u6709\u6548\u5229\u7528\u7387<\/code><\/pre>\n<p>\u8fd9\u51e0\u4e2a\u56e0\u5b50\u91cc\uff0c\u6700\u57fa\u7840\u7684\u662f\u5355\u76d8\u987a\u5e8f\u5199\u3002HDD \u4e0d\u9002\u5408\u5927\u91cf\u968f\u673a\u5c0f\u5199\uff0c\u4f46\u6301\u7eed\u987a\u5e8f\u5199\u4ecd\u7136\u6709\u4e0d\u9519\u7684\u541e\u5410\u3002HorizonVault \u7684 Store \u5199\u5165\u8def\u5f84\u5c3d\u91cf\u4fdd\u6301\u5355\u8c03\uff1a\u771f\u5b9e\u6570\u636e\u8fdb\u5165 LogSegment\uff0c\u5b9a\u4f4d\u4fe1\u606f\u8fdb\u5165 IndexSegment\uff0c\u4e0d\u5728\u4e3b\u5199\u8def\u5f84\u4e0a\u505a\u590d\u6742\u539f\u5730\u66f4\u65b0\uff0c\u4e5f\u4e0d\u628a\u6570\u636e\u548c\u7d22\u5f15\u6df7\u5728\u4e00\u8d77\u53cd\u590d\u6539\u5199\u3002<\/p>\n<p>\u7b2c\u4e8c\u4e2a\u56e0\u5b50\u662f\u8d44\u6e90\u6c60\u5e76\u884c\u3002\u4e00\u4e2a Kafka \u8fdc\u7a0b\u5199\u5165\u8bf7\u6c42\u6700\u7ec8\u4f1a\u843d\u5230\u67d0\u4e2a partition \u7684 leader replica\uff0c\u800c\u8fd9\u4e2a replica \u53c8\u843d\u5728\u67d0\u4e2a Store \u8282\u70b9\u7684\u4e00\u5757\u78c1\u76d8\u4e0a\u3002Broker \u8d1f\u8d23\u9009\u62e9\u5408\u9002\u7684 partition \u548c leader\uff0cMeta \u8d1f\u8d23\u8ba9 replica \u5c3d\u91cf\u5747\u5300\u5206\u5e03\u5230\u8282\u70b9\u548c\u78c1\u76d8\uff0cStore \u8d1f\u8d23\u5728\u5355\u76d8\u5185\u90e8\u628a\u5199\u5165\u987a\u5e8f\u63a8\u8fdb\u3002\u4e0a\u5c42\u770b\u5230\u7684\u662f\u4e00\u4e2a\u8fdc\u7aef\u5b58\u50a8\u7aef\u70b9\uff0c\u5e95\u5c42\u5b9e\u9645\u662f\u4e00\u7ec4\u8282\u70b9\u3001\u4e00\u7ec4\u78c1\u76d8\u548c\u4e00\u6279 partition \u5728\u5e76\u884c\u5de5\u4f5c\u3002<\/p>\n<p>\u7b2c\u4e09\u4e2a\u56e0\u5b50\u662f\u6709\u6548\u5229\u7528\u7387\u3002\u9ad8\u541e\u5410\u7cfb\u7edf\u5728\u5c40\u90e8\u6162\u70b9\u51fa\u73b0\u540e\uff0c\u5f88\u5bb9\u6613\u6f14\u53d8\u6210\u5168\u5c40\u6392\u961f\uff1a\u67d0\u5757\u76d8\u54cd\u5e94\u53d8\u6162\u3001\u67d0\u4e2a follower \u540c\u6b65\u843d\u540e\u3001\u67d0\u4e2a\u7f51\u7edc\u8fde\u63a5\u79ef\u538b\uff0c\u5982\u679c\u7cfb\u7edf\u8fd8\u7ee7\u7eed\u628a\u6d41\u91cf\u538b\u4e0a\u53bb\uff0c\u5e73\u5747\u541e\u5410\u548c P99 \u5ef6\u8fdf\u4f1a\u4e00\u8d77\u6076\u5316\u3002HorizonVault \u5728 Broker\u3001Store\u3001Netty\u3001HA \u8fd9\u4e9b\u5c42\u9762\u90fd\u505a\u4e86\u72b6\u6001\u53cd\u9988\uff1a\u6162\u76d8\u4f1a\u88ab\u9694\u79bb\uff0c\u6162\u526f\u672c\u4f1a\u5f71\u54cd\u5199\u5165\u9009\u62e9\uff0c\u5165\u53e3\u8fde\u63a5\u4f1a\u89e6\u53d1\u80cc\u538b\uff0c\u5f3a ACK \u8bf7\u6c42\u4f1a\u88ab\u6302\u8d77\u5e76\u7531\u540e\u7eed\u4e8b\u4ef6\u5524\u9192\uff0c\u5199\u7ebf\u7a0b\u53ef\u4ee5\u7ee7\u7eed\u5904\u7406\u540e\u7eed\u8ffd\u52a0\u3002\u6240\u4ee5 HorizonVault \u7684\u9ad8\u541e\u5410\u66f4\u50cf\u4e00\u5957\u6301\u7eed\u7b5b\u9009\u7684\u6d41\u6c34\u7ebf\uff1a\u80fd\u987a\u5e8f\u5199\u3001\u80fd\u5e76\u884c\u5199\u3001\u72b6\u6001\u5065\u5eb7\u7684\u8bf7\u6c42\u5c3d\u5feb\u63a8\u8fdb\uff1b\u4f1a\u6269\u5927\u5c3e\u5ef6\u8fdf\u6216\u6545\u969c\u534a\u5f84\u7684\u8bf7\u6c42\u5c3d\u65e9\u6362\u8def\u3001\u964d\u7ea7\u6216\u5931\u8d25\u3002\u5bf9 HDD \u8d44\u6e90\u6c60\u6765\u8bf4\uff0c\u8fd9\u79cd\u514b\u5236\u672c\u8eab\u5c31\u662f\u6027\u80fd\u7684\u4e00\u90e8\u5206\u3002<\/p>\n<p>HorizonVault \u7684\u6a21\u5757\u8fb9\u754c\u5f88\u6e05\u695a\u3002Meta \u662f\u63a7\u5236\u9762\uff0c\u7ba1\u7406\u8282\u70b9\u3001\u78c1\u76d8\u3001\u5206\u533a\u3001\u526f\u672c\u3001\u52a8\u6001\u914d\u7f6e\u548c\u8fc1\u79fb\uff1bBroker \u662f\u534f\u8c03\u9762\uff0c\u627f\u63a5\u5916\u90e8\u8bf7\u6c42\u5e76\u9009\u62e9\u53ef\u5199 partition \u6216\u53ef\u8bfb replica\uff1bStore \u662f\u6570\u636e\u9762\uff0c\u8d1f\u8d23\u672c\u5730\u6587\u4ef6\u3001\u7d22\u5f15\u3001\u526f\u672c\u72b6\u6001\u548c HA \u540c\u6b65\uff1bNetwork \u662f\u516c\u5171\u901a\u4fe1\u5c42\uff0c\u5904\u7406\u534f\u8bae\u3001\u8fde\u63a5\u3001\u8d85\u65f6\u548c\u80cc\u538b\uff1bCommon \u5219\u6c89\u6dc0 BlobId\u3001Record\u3001PartitionState\u3001ReplicaState\u3001DiskState \u7b49\u57fa\u7840\u6a21\u578b\u3002<\/p>\n<p>\u8fd9\u79cd\u5206\u5c42\u7684\u76ee\u7684\uff0c\u662f\u8ba9\u6bcf\u4e00\u7c7b\u95ee\u9898\u5728\u6b63\u786e\u7684\u4f4d\u7f6e\u88ab\u89e3\u51b3\u3002Meta \u4e0d\u53c2\u4e0e\u4e3b\u5199\u5165\u8def\u5f84\u843d\u76d8\uff0c\u5b83\u5173\u5fc3\u7684\u662f\u8d44\u6e90\u653e\u5f97\u662f\u5426\u5747\u5300\u3001\u78c1\u76d8\u662f\u5426\u53ef\u7528\u3001\u526f\u672c\u89d2\u8272\u662f\u5426\u5408\u7406\u3002Broker \u4e0d\u76f4\u63a5\u5199\u6587\u4ef6\uff0c\u5b83\u5173\u5fc3\u7684\u662f\u8bf7\u6c42\u5e94\u8be5\u53d1\u5230\u54ea\u4e2a leader replica\u3001\u76ee\u6807\u78c1\u76d8\u662f\u5426\u8fd8\u80fd\u63a5\u6d41\u91cf\u3001\u8bfb\u8bf7\u6c42\u662f\u5426\u53ef\u4ee5\u5728 follower \u4e0a\u56de\u9000\u3002Store \u4e0d\u505a\u5168\u5c40\u8c03\u5ea6\uff0c\u5b83\u5173\u5fc3\u7684\u662f\u672c\u5730\u526f\u672c\u662f\u5426\u53ef\u5199\u3001\u78c1\u76d8\u6c34\u4f4d\u662f\u5426\u5b89\u5168\u3001\u6570\u636e\u5982\u4f55\u987a\u5e8f\u8ffd\u52a0\u3001\u7d22\u5f15\u5982\u4f55\u7ef4\u62a4\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798841\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u4e00\u6761\u5199\u5165\u8bf7\u6c42\u8fdb\u6765\u540e\uff0c\u4f1a\u5148\u7ecf\u8fc7 Netty \u957f\u5ea6\u5e27\u3001\u8d85\u65f6\u548c\u80cc\u538b\u5904\u7406\uff1bBroker \u9009\u62e9 partition \u548c leader replica\uff0c\u5e76\u68c0\u67e5\u76ee\u6807\u78c1\u76d8\u7684 inflight \u548c\u9694\u79bb\u72b6\u6001\uff1bStore \u6536\u5230\u8bf7\u6c42\u540e\u7ee7\u7eed\u505a leader\u3001running\u3001\u78c1\u76d8\u6c34\u4f4d\u3001\u72b6\u6001\u8bb8\u53ef\u3001follower gap \u7b49\u95e8\u7981\uff1b\u771f\u6b63\u843d\u76d8\u65f6\uff0cReplica \u628a\u4efb\u52a1\u5207\u5230\u78c1\u76d8\u7ea7 write executor\uff0c\u518d\u6267\u884c log append \u548c index \u66f4\u65b0\u3002<\/p>\n<p>\u8fd9\u6761\u94fe\u8def\u91cc\u6709\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u8bbe\u8ba1\u53d6\u820d\uff1aMeta \u7684\u5168\u5c40\u89c6\u56fe\u4e0d\u5728\u6bcf\u6b21\u5199\u5165\u65f6\u6210\u4e3a\u540c\u6b65\u74f6\u9888\uff0c\u4f46\u5b83\u63d0\u524d\u628a\u8d44\u6e90\u5e03\u5c40\u3001\u72b6\u6001\u548c\u52a8\u6001\u914d\u7f6e\u51c6\u5907\u597d\uff1bBroker \u57fa\u4e8e\u8fd9\u4e9b\u4fe1\u606f\u505a\u8def\u7531\uff1bStore \u57fa\u4e8e\u672c\u5730\u72b6\u6001\u505a\u6700\u7ec8\u95e8\u7981\u3002\u8fd9\u6837\u4e3b\u8def\u5f84\u8db3\u591f\u77ed\uff0c\u63a7\u5236\u8def\u5f84\u53c8\u80fd\u6301\u7eed\u5f71\u54cd\u4e3b\u8def\u5f84\u3002\u5bf9\u4e8e Kafka \u8fdc\u7a0b\u5b58\u50a8\u8fd9\u79cd\u6301\u7eed\u5927\u6d41\u91cf\u5199\u5165\u573a\u666f\uff0c\u8fd9\u4e2a\u8fb9\u754c\u975e\u5e38\u5173\u952e\u3002<\/p>\n<h2>\u4e8c\u3001\u5b58\u50a8\u7ed3\u6784\uff1aDiskStore\u3001Replica\u3001Log\/Index \u5404\u53f8\u5176\u804c<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798842\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>HorizonVault \u7684\u672c\u5730\u5b58\u50a8\u4ee5\u78c1\u76d8\u4e3a\u5355\u4f4d\u7ec4\u7ec7\u8d44\u6e90\uff0c\u907f\u514d\u628a\u6240\u6709\u6570\u636e\u90fd\u653e\u8fdb\u4e00\u4e2a\u5927\u76ee\u5f55\u3002\u6bcf\u5757\u78c1\u76d8\u8fdb\u5165\u8fd0\u884c\u6001\u540e\uff0c\u4f1a\u88ab\u62bd\u8c61\u6210 DiskStore\uff0c\u91cc\u9762\u6302\u7740\u78c1\u76d8\u4fe1\u606f\u3001\u6267\u884c\u5668\u3001\u7f13\u5b58\u3001\u9650\u901f\u5668\u548c\u6587\u4ef6\u5206\u914d\u5668\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u78c1\u76d8\u5728\u7cfb\u7edf\u91cc\u6709\u81ea\u5df1\u7684\u6267\u884c\u57df\u548c\u6cbb\u7406\u80fd\u529b\uff0c\u53ef\u4ee5\u4e3b\u52a8\u53c2\u4e0e\u8d44\u6e90\u8c03\u5ea6\u548c\u72b6\u6001\u63a7\u5236\u3002Replica \u5219\u662f\u4e00\u4e2a\u5206\u533a\u526f\u672c\u5728\u672c\u5730\u78c1\u76d8\u4e0a\u7684\u6267\u884c\u5355\u5143\u3002\u4e00\u4e2a replica \u76ee\u5f55\u4e0b\u4f1a\u6709 log\u3001index\u3001change\u3001replica.meta \u7b49\u7ed3\u6784\uff1a<\/p>\n<pre><code>mountPath\/\n    &lt;partitionId&gt;\/\n        log\/ # \u771f\u5b9e\u6570\u636e\uff0c\u987a\u5e8f\u8ffd\u52a0\n        index\/ # key -&gt; segment\/position\/size\n        change\/ # \u5220\u9664\u3001\u53d8\u66f4\u56de\u653e\n        replica.meta<\/code><\/pre>\n<p>\u8fd9\u51e0\u4e2a\u76ee\u5f55\u5404\u6709\u5206\u5de5\u3002LogSegment \u627f\u8f7d\u771f\u5b9e record\uff0c\u662f\u541e\u5410\u4e3b\u8def\u5f84\uff1bIndexSegment \u4fdd\u5b58 StoreKey \u5230 log segment \u4f4d\u7f6e\u7684\u6620\u5c04\uff0c\u662f\u8bfb\u8def\u5f84\u5b9a\u4f4d\u7684\u57fa\u7840\uff1bChangeLog \u8bb0\u5f55\u5220\u9664\u548c\u53d8\u66f4\uff0c\u8f85\u52a9\u6062\u590d\u548c\u56de\u653e\uff1breplica.meta \u6301\u4e45\u5316\u526f\u672c\u672c\u5730\u72b6\u6001\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798843\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u7f51\u7edc\u5e27\u548c\u843d\u76d8 record \u4e5f\u88ab\u5206\u5f00\u8bbe\u8ba1\u3002\u7f51\u7edc\u5e27\u5173\u5fc3\u4f20\u8f93\u8fb9\u754c\uff1arequestId\u3001\u7248\u672c\u3001\u5e8f\u5217\u5316\u7c7b\u578b\u3001totalLength\u3001headerLength\u3001header \u548c body\u3002\u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u90fd\u7528\u957f\u5ea6\u5e27\u5904\u7406 TCP \u7c98\u5305\/\u534a\u5305\u95ee\u9898\uff0c\u5e76\u7528\u6700\u5927\u5e27\u957f\u9650\u5236\u4fdd\u62a4\u5185\u5b58\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798844\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u843d\u76d8 Record \u5173\u5fc3\u7684\u662f\u6062\u590d\u548c\u5b8c\u6574\u6027\u3002Magic Code \u7528\u6765\u8bc6\u522b\u8bb0\u5f55\u8fb9\u754c\uff0cRecord Size \u8ba9\u6062\u590d\u626b\u63cf\u53ef\u4ee5\u8df3\u8fc7\u5b8c\u6574\u8bb0\u5f55\uff0cVersion \u548c RecordDataType \u8868\u8fbe\u683c\u5f0f\u548c\u8bed\u4e49\uff0cTTL \u548c StoreKey \u8ba9\u751f\u547d\u5468\u671f\u4e0e\u5bf9\u8c61\u8eab\u4efd\u7ed1\u5b9a\u5728\u4e00\u8d77\uff0cPayload CRC32 \u5219\u7528\u4e8e\u53d1\u73b0\u6570\u636e\u635f\u574f\u3002\u8fd9\u4e2a\u5206\u5c42\u5f88\u6734\u7d20\uff0c\u4f46\u975e\u5e38\u5b9e\u7528\u3002\u7f51\u7edc\u5c42\u4e0d\u8981\u80cc\u8d1f\u5b58\u50a8\u6062\u590d\u8bed\u4e49\uff0c\u843d\u76d8\u5c42\u4e5f\u4e0d\u8981\u4f9d\u8d56\u5916\u90e8\u6570\u636e\u5e93\u544a\u8bc9\u5b83\u201c\u5199\u5230\u54ea\u91cc\u201d\u3002\u91cd\u542f\u540e\uff0cStore \u53ef\u4ee5\u901a\u8fc7 magic\u3001size\u3001crc \u548c index \u91cd\u65b0\u786e\u8ba4\u6587\u4ef6\u8fb9\u754c\uff1b\u8bfb\u8bf7\u6c42\u53ef\u4ee5\u901a\u8fc7 index \u76f4\u63a5\u5b9a\u4f4d log\u3002<\/p>\n<h2>\u4e09\u3001\u5199\u5165\u4e0e\u8bfb\u53d6\uff1aLog \u987a\u5e8f\u8ffd\u52a0\uff0cIndex \u627f\u63a5\u968f\u673a\u6027<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798845\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>HorizonVault \u7684\u5199\u5165\u8def\u5f84\u6709\u4e00\u4e2a\u975e\u5e38\u660e\u786e\u7684\u76ee\u6807\uff1a\u4e0d\u8981\u628a HDD \u62d6\u8fdb\u968f\u673a\u5199\u6a21\u5f0f\u3002\u8bf7\u6c42\u8fdb\u5165 Store \u540e\uff0cBlobStoreService \u4f1a\u5148\u505a\u4e00\u6279\u9632\u5fa1\u6027\u68c0\u67e5\uff0c\u5305\u62ec\u8282\u70b9\u662f\u5426\u5141\u8bb8\u5199\u3001blob \u5927\u5c0f\u662f\u5426\u5408\u89c4\u3001\u672c\u5730 replica \u662f\u5426\u5b58\u5728\u3001replica \u662f\u5426 running\u3001\u5f53\u524d\u526f\u672c\u662f\u5426 leader\u3001\u78c1\u76d8\u662f\u5426\u5b58\u5728\u3001\u78c1\u76d8\u6c34\u4f4d\u548c\u72b6\u6001\u662f\u5426\u5141\u8bb8\u5199\u3002<\/p>\n<p>\u8fd9\u4e9b\u68c0\u67e5\u5bf9\u5e94\u7684\u662f\u9ad8\u541e\u5410\u7cfb\u7edf\u91cc\u5e38\u89c1\u7684\u65f6\u95f4\u5dee\u95ee\u9898\uff1a\u72b6\u6001\u5df2\u7ecf\u53d8\u5316\uff0c\u4f46\u8bf7\u6c42\u8fd8\u5728\u6392\u961f\u3002\u5199\u5165\u771f\u6b63\u8fdb\u5165 Replica.append \u540e\uff0c\u8fd8\u4f1a\u5728\u7ebf\u7a0b\u5185\u518d\u6b21\u786e\u8ba4 replica \u72b6\u6001\u3001leader size\u3001\u8bf7\u6c42\u8d85\u65f6\u548c\u961f\u5217\u7b49\u5f85\u65f6\u95f4\uff0c\u907f\u514d\u4e00\u4e2a\u8fc7\u671f\u8bf7\u6c42\u6216\u72b6\u6001\u4e0d\u518d\u5339\u914d\u7684\u8bf7\u6c42\u7ee7\u7eed\u843d\u76d8\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798846\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u771f\u6b63\u7684\u843d\u76d8\u52a8\u4f5c\u4fdd\u6301\u5f88\u77ed\uff1a<\/p>\n<ul>\n<li>record \u8ffd\u52a0\u5230 LogSegment\uff0c\u8fd4\u56de segment\u3001position \u548c size\u3002<\/li>\n<li>\u6784\u9020 IndexValue\uff0c\u628a flag\u3001ttl\u3001position\u3001size \u7b49\u5b9a\u4f4d\u4fe1\u606f\u5199\u5165 IndexSegment\u3002<\/li>\n<li>\u6839\u636e ACK \u7b49\u7ea7\u51b3\u5b9a\u8bf7\u6c42\u662f\u5426\u53ef\u4ee5\u7acb\u5373\u8fd4\u56de\uff0c\u6216\u8005\u8fdb\u5165 PutReqHolder \u7b49\u5f85 flush\/follower synced\u3002<\/li>\n<\/ul>\n<p>LogSegment \u662f\u4e3b\u6570\u636e\u8def\u5f84\uff0cIndexSegment \u662f\u5b9a\u4f4d\u8def\u5f84\u3002HorizonVault \u6ca1\u6709\u628a\u5b8c\u6574 record \u5143\u6570\u636e\u585e\u8fdb\u7d22\u5f15\uff0c\u800c\u662f\u53ea\u4fdd\u5b58\u5b9a\u4f4d\u548c\u751f\u547d\u5468\u671f\u6240\u5fc5\u9700\u7684\u4fe1\u606f\u3002\u8fd9\u6837\u7d22\u5f15 entry \u8db3\u591f\u5c0f\u3001\u683c\u5f0f\u56fa\u5b9a\uff0c\u6bb5\u5185\u53ef\u4ee5\u901a\u8fc7\u4e8c\u5206\u67e5\u627e\u548c\u6309 offset \u8bfb\u53d6\u5feb\u901f\u5b9a\u4f4d\u3002\u8bfb\u53d6\u8def\u5f84\u6b63\u597d\u53cd\u8fc7\u6765\u3002BlobStoreService.get \u627e\u5230\u672c\u5730 replica \u540e\uff0cReplica \u5148\u901a\u8fc7 IndexSegmentQueue \u67e5 StoreKey \u5bf9\u5e94\u7684 IndexEntry\uff1bIndexSegmentQueue \u4f1a\u5148\u770b\u7f13\u5b58\uff0c\u7f13\u5b58\u672a\u547d\u4e2d\u518d\u6309 segment \u4ece\u65b0\u5230\u65e7\u67e5\u627e\uff0c\u5e76\u7528 timestamp \u8fb9\u754c\u8fc7\u6ee4\u5019\u9009\u6bb5\u3002\u547d\u4e2d IndexEntry \u540e\uff0c\u518d\u6839\u636e segmentName\u3001position\u3001size \u4ece LogSegment \u8bfb\u53d6\u5bf9\u5e94 record\u3002<\/p>\n<p>\u8fd9\u4e2a\u7ed3\u6784\u628a\u968f\u673a\u6027\u538b\u7f29\u5230\u4e86\u5c0f\u7d22\u5f15\u4e0a\uff0c\u628a\u771f\u6b63\u7684\u5927 payload \u7559\u5728 log \u91cc\u987a\u5e8f\u7ec4\u7ec7\u3002\u5bf9 HDD \u6765\u8bf4\uff0c\u8fd9\u4e00\u70b9\u5f88\u5173\u952e\uff1a\u7cfb\u7edf\u4e0d\u8981\u6c42\u78c1\u76d8\u627f\u62c5\u5927\u91cf\u5c0f\u5757\u968f\u673a\u8bfb\u5199\uff0c\u800c\u662f\u8ba9\u5c0f\u7d22\u5f15\u8d1f\u8d23\u5b9a\u4f4d\uff0c\u8ba9\u4e3b\u6570\u636e\u4fdd\u6301\u8fde\u7eed\u8ffd\u52a0\u548c\u786e\u5b9a\u8303\u56f4\u8bfb\u53d6\u3002\u7d22\u5f15\u8fd8\u5206\u5185\u5b58\u6001\u548c\u6587\u4ef6\u6001\u3002\u6d3b\u8dc3 IndexSegment \u5148\u5728 direct memory \u4e2d\u8ffd\u52a0\u56fa\u5b9a\u5bbd\u5ea6 entry\uff0c\u5c01\u6bb5\u540e\u518d dump \u6210\u6587\u4ef6\u6001\u7d22\u5f15\u3002\u6587\u4ef6\u6001\u7d22\u5f15\u6253\u5f00\u65f6\u53ea\u9700\u8981\u8bfb\u53d6 header\uff0c\u5e76\u6839\u636e\u6587\u4ef6\u5927\u5c0f\u8ba1\u7b97 entry \u6570\u91cf\uff1b\u540e\u7eed\u67e5\u627e\u901a\u8fc7 offset \u8bfb\u53d6 key\/value\u3002\u8fd9\u4e2a\u8bbe\u8ba1\u517c\u987e\u4e86\u5199\u5165\u9636\u6bb5\u7684\u4f4e\u5f00\u9500\u548c\u8bfb\u53d6\u9636\u6bb5\u7684\u786e\u5b9a\u6027\u3002<\/p>\n<h2>\u56db\u3001\u78c1\u76d8\u6cbb\u7406\u3001\u7ebf\u7a0b\u9694\u79bb\u4e0e\u7f51\u7edc\u80cc\u538b<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798847\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>HorizonVault \u628a\u78c1\u76d8\u5f53\u4f5c\u53ef\u8c03\u5ea6\u3001\u53ef\u9694\u79bb\u3001\u53ef\u964d\u7ea7\u7684\u8d44\u6e90\u3002DiskStore \u7684\u5199\u5165\u8bb8\u53ef\u4f1a\u5148\u68c0\u67e5\u9ad8\u6c34\u4f4d\uff0c\u518d\u770b\u5f53\u524d DiskState \u662f\u5426\u5141\u8bb8 store write\uff1b\u8bfb\u3001\u5199\u3001HA read \u4e5f\u6709\u5404\u81ea\u7684\u8bb8\u53ef\u89c4\u5219\u3002\u8fd9\u6837\u4e00\u4e2a\u78c1\u76d8\u53ef\u4ee5\u5904\u5728\u201c\u5141\u8bb8\u8bfb\u4f46\u4e0d\u5141\u8bb8\u5199\u201d\u201c\u5141\u8bb8 HA read \u4f46\u4e0d\u9002\u5408\u524d\u53f0\u5199\u201d\u7b49\u66f4\u7ec6\u7684\u72b6\u6001\u91cc\u3002<\/p>\n<p>Broker \u4fa7\u8fd8\u4f1a\u505a\u78c1\u76d8\u7ea7 inflight \u8ddf\u8e2a\u3002\u53d1\u9001 PUT \u8bf7\u6c42\u524d\uff0cBroker \u4f1a\u7528 diskId@nodeId \u6784\u9020\u78c1\u76d8 key\uff0c\u5e76\u5c1d\u8bd5\u589e\u52a0 inflight\u3002\u5982\u679c\u8fd9\u5757\u76d8\u5df2\u7ecf\u88ab\u9694\u79bb\uff0c\u8bf7\u6c42\u4f1a\u5728\u53d1\u9001\u524d\u5931\u8d25\u6216\u6362\u8def\uff0c\u907f\u514d\u7ee7\u7eed\u628a\u6d41\u91cf\u6253\u5230\u95ee\u9898\u76d8\u4e0a\u3002<\/p>\n<p>\u9694\u79bb\u5224\u65ad\u4f1a\u540c\u65f6\u53c2\u8003\u8d1f\u8f7d\u548c\u54cd\u5e94\u65f6\u95f4\u3002DiskMetricsCollector \u4f1a\u6309\u7a97\u53e3\u7edf\u8ba1\u6bcf\u5757\u76d8\u7684 inflight \u548c\u54cd\u5e94\u65f6\u95f4\u3002\u53ea\u6709\u5e73\u5747 inflight \u9ad8\u4e14\u5e73\u5747\u54cd\u5e94\u65f6\u95f4\u4e5f\u9ad8\uff0c\u7cfb\u7edf\u624d\u8ba4\u4e3a\u8fd9\u5757\u76d8\u6b63\u5728\u62d6\u6162\u6574\u4f53\u94fe\u8def\u3002\u5355\u72ec inflight \u9ad8\u53ef\u80fd\u53ea\u662f\u6d41\u91cf\u5927\uff0c\u5355\u72ec\u54cd\u5e94\u6162\u4e5f\u53ef\u80fd\u53ea\u662f\u77ac\u65f6\u6296\u52a8\uff1b\u4e24\u4e2a\u6761\u4ef6\u540c\u65f6\u6210\u7acb\uff0c\u624d\u66f4\u50cf\u4e00\u4e2a\u9700\u8981\u8def\u7531\u907f\u8ba9\u7684\u6162\u76d8\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798848\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u7ebf\u7a0b\u6a21\u578b\u540c\u6837\u56f4\u7ed5\u78c1\u76d8\u5c55\u5f00\u3002\u6bcf\u4e2a DiskStore \u90fd\u6709\u81ea\u5df1\u7684 allocator\u3001cleaner\u3001write\u3001flush\u3001cache\u3001HA client\/server \u548c put request hold executor\u3002\u5199\u7ebf\u7a0b\u548c\u5237\u76d8\u7ebf\u7a0b\u8fd8\u4f1a\u6309 partitionId \u505a\u7a33\u5b9a\u5206\u7247\uff1a\u540c\u4e00\u4e2a partition \u6301\u7eed\u843d\u5230\u540c\u4e00\u7ec4\u6267\u884c\u5668\u4e0a\uff0c\u4e0d\u540c partition \u53ef\u4ee5\u5728\u540c\u4e00\u5757\u76d8\u5185\u5e76\u884c\u63a8\u8fdb\uff0c\u4e0d\u540c\u78c1\u76d8\u4e4b\u95f4\u5929\u7136\u9694\u79bb\u3002<\/p>\n<p>\u8fd9\u79cd\u8bbe\u8ba1\u6bd4\u4e00\u4e2a\u5168\u5c40\u5927\u7ebf\u7a0b\u6c60\u66f4\u9002\u5408 HDD\u3002\u5168\u5c40\u7ebf\u7a0b\u6c60\u77ed\u671f\u770b\u8d77\u6765\u541e\u5410\u9ad8\uff0c\u4f46\u6162\u76d8\u51fa\u73b0\u540e\uff0c\u5f88\u591a\u65e0\u5173\u4efb\u52a1\u4f1a\u88ab\u62d6\u8fdb\u540c\u4e00\u4e2a\u961f\u5217\u3002\u78c1\u76d8\u7ea7\u7ebf\u7a0b\u8fb9\u754c\u8ba9\u95ee\u9898\u66f4\u5bb9\u6613\u5c40\u90e8\u5316\uff1a\u4e00\u5757\u76d8\u6162\uff0c\u4e3b\u8981\u5f71\u54cd\u5b83\u81ea\u5df1\u7684\u961f\u5217\u548c replica\uff0c\u5176\u4ed6\u78c1\u76d8\u4ecd\u7136\u53ef\u4ee5\u7ee7\u7eed\u63a8\u8fdb\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798849\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u7f51\u7edc\u5c42\u8d1f\u8d23\u628a\u5165\u53e3\u538b\u529b\u63a7\u5236\u4f4f\u3002\u670d\u52a1\u7aef\u57fa\u4e8e Netty NIO\uff0cpipeline \u4e2d\u6709 traffic shaping\u3001\u957f\u5ea6\u5e27\u89e3\u7801\u3001idle handler\u3001\u80cc\u538b handler \u548c\u4e1a\u52a1 inbound handler\u3002\u6bcf\u4e2a\u8bf7\u6c42\u4f1a\u8bb0\u5f55 request id\u3001trace id\u3001client send time\u3001server receive time \u548c\u5f53\u524d NIO event loop\uff0c\u5e76\u6ce8\u518c\u670d\u52a1\u7aef\u8d85\u65f6\u4efb\u52a1\u3002<\/p>\n<p>\u80cc\u538b\u901a\u8fc7 channel \u7ea7 inflight \u548c write buffer \u6c34\u4f4d\u5b9e\u73b0\u3002\u8bf7\u6c42\u8bfb\u5165\u65f6 inflight \u52a0\u4e00\uff0c\u8d85\u8fc7\u9608\u503c\u5c31\u5173\u95ed autoRead\uff1b\u54cd\u5e94\u5199\u51fa\u540e inflight \u51cf\u4e00\uff0c\u4f4e\u4e8e\u9608\u503c\u518d\u6062\u590d\u8bfb\u53d6\u3002\u5982\u679c channel \u672c\u8eab\u4e0d\u53ef\u5199\uff0c\u5373\u4f7f\u4e1a\u52a1\u80cc\u538b\u5f00\u5173\u6ca1\u6709\u89e6\u53d1\uff0c\u4e5f\u4f1a\u5173\u95ed autoRead\u3002\u8fd9\u4e2a\u673a\u5236\u7684\u610f\u4e49\u662f\uff1a\u5f53 Store \u4fa7\u6216\u7f51\u7edc\u5199\u51fa\u53d8\u6162\u65f6\uff0c\u4e0d\u8ba9\u8bf7\u6c42\u65e0\u9650\u5806\u8fdb\u5185\u5b58\u548c\u6267\u884c\u961f\u5217\u3002<\/p>\n<p>\u8fd9\u51e0\u5c42\u8fde\u8d77\u6765\uff0c\u5c31\u662f HorizonVault \u7684\u6297\u538b\u65b9\u5f0f\uff1a\u5165\u53e3\u8fde\u63a5\u5c11\u8bfb\u4e00\u70b9\uff0cBroker \u8def\u7531\u7ed5\u5f00\u4e00\u70b9\uff0cStore \u72b6\u6001\u62d2\u7edd\u4e00\u70b9\uff0c\u526f\u672c\u540c\u6b65\u6162\u4e86\u5c31\u6362\u8def\u6216\u7b49\u5f85\u3002\u9ad8\u541e\u5410\u4f9d\u8d56\u53ef\u63a7\u961f\u5217\u91cc\u7684\u5065\u5eb7\u8bf7\u6c42\u6301\u7eed\u5411\u524d\uff0c\u800c\u975e\u65e0\u6761\u4ef6\u63a5\u6536\u66f4\u591a\u8bf7\u6c42\u3002<\/p>\n<h2>\u4e94\u3001Broker \u548c Meta\uff1a\u72b6\u6001\u611f\u77e5\u7684\u8d44\u6e90\u8c03\u5ea6<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798850\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>Broker PUT \u7684\u6838\u5fc3\u662f\u72b6\u6001\u611f\u77e5\u7684\u76ee\u6807\u9009\u62e9\u3002\u5b83\u4f1a\u6392\u9664\u8fd1\u671f\u4f7f\u7528\u8fc7\u7684 partition \u548c leader node\uff0c\u51cf\u5c11\u8fde\u7eed\u547d\u4e2d\u70ed\u70b9\uff1b\u518d\u4ece PartitionManager \u91cc\u9009\u62e9\u5019\u9009 partition\uff0c\u6839\u636e leader node \u627e\u5230\u5bf9\u5e94 ReplicaInfo \u548c NodeInfo\uff0c\u6700\u540e\u62ff\u5230 Store client \u53d1\u9001 STORE_PUT\u3002<\/p>\n<p>\u8fd9\u4e2a\u8fc7\u7a0b\u770b\u8d77\u6765\u50cf\u8def\u7531\uff0c\u5b9e\u9645\u4e5f\u662f\u6027\u80fd\u7b56\u7565\u3002HorizonVault \u9700\u8981\u628a\u5199\u5165\u644a\u5230\u8db3\u591f\u591a\u7684 partition\u3001\u8282\u70b9\u548c\u78c1\u76d8\u4e0a\uff0c\u540c\u65f6\u907f\u5f00\u5df2\u7ecf\u8868\u73b0\u51fa\u538b\u529b\u7684\u76ee\u6807\u3002\u8fd1\u671f\u4f7f\u7528\u8fc7\u7684 partition \u4f1a\u88ab\u6392\u9664\uff0c\u76ee\u6807\u78c1\u76d8 inflight \u4f1a\u88ab\u68c0\u67e5\uff0c\u9694\u79bb\u76d8\u4f1a\u88ab\u62d2\u7edd\uff0c\u53d1\u9001\u5931\u8d25\u540e\u8fd8\u53ef\u4ee5\u901a\u8fc7\u6392\u9664\u96c6\u5408\u7ee7\u7eed\u627e\u4e0b\u4e00\u4e2a\u76ee\u6807\u3002<\/p>\n<p>GET \u8def\u5f84\u4e5f\u4f1a\u505a\u72b6\u6001\u7b5b\u9009\u3002Broker \u4f1a\u4f18\u5148\u8bfb leader\uff0c\u4ee5\u4fdd\u8bc1\u6570\u636e\u65b0\u9c9c\u5ea6\uff1b\u5982\u679c leader \u4e0d\u53ef\u8bfb\uff0c\u5219\u6309 replica \u72b6\u6001\u3001\u8282\u70b9\u72b6\u6001\u3001\u78c1\u76d8\u72b6\u6001\u548c broker read choose \u8bb8\u53ef\u505a\u56de\u9000\u3002\u8fd9\u6837\u8bfb\u8def\u5f84\u5929\u7136\u652f\u6301 follower fallback\uff0c\u4e0d\u4f1a\u628a\u4e00\u6b21\u8bfb\u5931\u8d25\u7b80\u5355\u66b4\u9732\u7ed9\u4e0a\u5c42\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798851\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>Meta \u89e3\u51b3\u7684\u662f\u66f4\u957f\u671f\u7684\u95ee\u9898\uff1a\u8d44\u6e90\u4e00\u5f00\u59cb\u5e94\u8be5\u600e\u4e48\u653e\u3002Meta \u7ba1\u7406\u7684\u4e0d\u53ea\u662f\u4e00\u5f20 partition \u8868\uff0c\u800c\u662f node\u3001disk\u3001replica\u3001partition\u3001\u8fc1\u79fb\u548c\u52a8\u6001\u914d\u7f6e\u7ec4\u6210\u7684\u8d44\u6e90\u7cfb\u7edf\u3002\u521b\u5efa partition \u65f6\uff0cPartitionResourceOperator \u4f1a\u62ff\u5230\u8282\u70b9\u78c1\u76d8\u4fe1\u606f\uff0c\u8fc7\u6ee4\u4e0d\u53ef\u521b\u5efa replica \u7684\u78c1\u76d8\uff0c\u518d\u6392\u9664\u51b7\u5374\u671f\u78c1\u76d8\uff0c\u6700\u540e\u6839\u636e\u6d3b\u8dc3\u526f\u672c\u6570\u3001leader \u6570\u3001\u78c1\u76d8\u53ef\u7528\u7a7a\u95f4\u548c\u6c34\u4f4d\u7b56\u7565\u6311\u9009 leader\/follower \u76ee\u6807\u76d8\u3002<\/p>\n<p>\u8fd9\u4e2a\u8fc7\u7a0b\u51b3\u5b9a\u4e86\u540e\u7eed\u541e\u5410\u7684\u5929\u82b1\u677f\u3002\u5982\u679c leader \u90fd\u96c6\u4e2d\u5728\u5c11\u6570\u8282\u70b9\uff0c\u6216\u8005 replica \u90fd\u843d\u5728\u5c11\u6570\u78c1\u76d8\uff0cBroker \u518d\u600e\u4e48\u968f\u673a\u4e5f\u5f88\u96be\u6253\u6563\u70ed\u70b9\u3002Meta \u7684\u4ef7\u503c\uff0c\u662f\u5728\u521b\u5efa\u548c\u8fc1\u79fb\u9636\u6bb5\u5c31\u5c3d\u91cf\u628a\u8d44\u6e90\u653e\u5300\uff0c\u8ba9 Broker \u6709\u8db3\u591f\u591a\u5065\u5eb7\u5019\u9009\u76ee\u6807\uff0c\u8ba9 Store \u7684\u591a\u76d8\u5e76\u884c\u771f\u6b63\u5c55\u5f00\u3002\u4e5f\u53ef\u4ee5\u8bf4\uff0cBroker \u8d1f\u8d23\u201c\u5f53\u4e0b\u8fd9\u4e00\u6b21\u8bf7\u6c42\u6253\u5230\u54ea\u91cc\u201d\uff0cMeta \u8d1f\u8d23\u201c\u957f\u671f\u770b\uff0c\u7cfb\u7edf\u6709\u6ca1\u6709\u8db3\u591f\u5747\u5300\u7684\u53ef\u9009\u8d44\u6e90\u201d\u3002\u4e24\u8005\u914d\u5408\u8d77\u6765\uff0cHorizonVault \u624d\u80fd\u628a\u901a\u7528 HDD \u4ece\u5355\u76d8\u80fd\u529b\u6269\u5c55\u6210\u96c6\u7fa4\u541e\u5410\u3002<\/p>\n<h2>\u516d\u3001HA \u590d\u5236\uff1aleader\/follower \u540c\u6b65\u4e0e\u5199\u5165 ACK \u89e3\u8026<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798852\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>HorizonVault \u7684 HA \u56f4\u7ed5 leader \u672c\u5730\u8ffd\u52a0\u548c follower \u4e3b\u52a8\u8ffd\u8d76\u5c55\u5f00\u3002\u5b83\u7684\u6838\u5fc3\u53d6\u820d\u662f\uff1a\u524d\u53f0\u5199\u5165\u5148\u4fdd\u8bc1 leader \u672c\u5730\u987a\u5e8f\u8ffd\u52a0\u8db3\u591f\u5feb\uff0cfollower \u901a\u8fc7\u72ec\u7acb HA \u94fe\u8def\u4e3b\u52a8\u8ffd\u8d76\uff1b\u5982\u679c\u8bf7\u6c42\u9700\u8981\u66f4\u5f3a\u786e\u8ba4\u8bed\u4e49\uff0c\u518d\u901a\u8fc7 ACK \u7b49\u7ea7\u628a\u5199\u5165\u8fd4\u56de\u548c flush\/follower synced \u4e8b\u4ef6\u7ed1\u5b9a\u8d77\u6765\u3002<\/p>\n<p>Follower \u91c7\u7528\u4e3b\u52a8 pull \u6a21\u578b\u3002\u5b83\u4f1a\u6839\u636e\u672c\u5730\u6700\u540e\u4e00\u6761 index entry \u63a8\u5bfc\u81ea\u5df1\u7684\u6700\u5927 blobId \u548c log offset\uff0c\u7136\u540e\u5411 leader \u53d1\u8d77 haPoll\uff0c\u544a\u8bc9 leader\uff1a\u6211\u5df2\u7ecf\u540c\u6b65\u5230\u8fd9\u91cc\uff0c\u8bf7\u4ece\u8fd9\u91cc\u4e4b\u540e\u7ee7\u7eed\u7ed9\u6211\u6570\u636e\u3002Leader \u6536\u5230\u540e\u4e0d\u4f1a\u4ece log \u5934\u5f00\u59cb\u626b\uff0c\u800c\u662f\u590d\u7528 IndexSegmentQueue \u627e\u5230 fromBlobId \u4e4b\u540e\u7684 entry\uff0c\u518d\u6309 cache -&gt; log \u7684\u987a\u5e8f\u6784\u9020 LogBatch\u3002<\/p>\n<p>LogBatch \u7684 meta \u5f88\u5173\u952e\u3002\u6bcf\u4e2a LogBatchSpan \u8bb0\u5f55\u539f\u59cb segment\u3001\u539f\u59cb offset\u3001record size\u3001batch buffer \u5185\u504f\u79fb\u3001blobId \u548c flag\u3002Follower \u62ff\u5230 batch \u540e\uff0c\u5c31\u80fd\u6309 span \u987a\u5e8f\u4ece buffer \u91cc\u5207\u51fa record\uff0c\u6784\u9020 MemoryRecord\uff0c\u518d\u8c03\u7528\u672c\u5730 Replica.append \u5199\u5165\u81ea\u5df1\u7684 log\/index\u3002HA \u590d\u5236\u7684\u5b9e\u9645\u8fc7\u7a0b\uff0c\u662f\u5148\u6309 index \u7cbe\u786e\u5b9a\u4f4d record\uff0c\u518d\u5728 follower \u672c\u5730\u987a\u5e8f\u56de\u653e\u3002<\/p>\n<p>ACK \u8bed\u4e49\u7531 PutReqHolder \u627f\u63a5\u3002\u666e\u901a\u5199\u5165\u53ef\u4ee5\u5728 leader append \u540e\u8f83\u5feb\u8fd4\u56de\uff1b\u5982\u679c\u8bf7\u6c42\u8981\u6c42 wait leader flush \u6216 follower synced\uff0cappend \u7ed3\u679c\u4f1a\u6309 log end offset \u653e\u8fdb pending map\u3002\u540e\u7eed leader flush \u5230\u67d0\u4e2a offset\uff0c\u6216\u8005 follower \u4e0a\u62a5\u81ea\u5df1\u540c\u6b65\u5230\u67d0\u4e2a offset\uff0cPutReqHolder \u518d\u6279\u91cf\u5524\u9192\u6ee1\u8db3\u6761\u4ef6\u7684\u8bf7\u6c42\u3002<\/p>\n<p>\u8fd9\u79cd\u8bbe\u8ba1\u907f\u514d\u4e86\u5199\u7ebf\u7a0b\u76f4\u63a5\u963b\u585e\u7b49\u5f85 follower\u3002\u5f3a\u786e\u8ba4\u8bf7\u6c42\u53ef\u4ee5\u5f97\u5230\u66f4\u4e25\u683c\u8bed\u4e49\uff0c\u7b49\u5f85\u53d1\u751f\u5728\u4e8b\u4ef6\u9a71\u52a8\u7684 holder \u91cc\uff0c\u78c1\u76d8\u5199\u7ebf\u7a0b\u53ef\u4ee5\u7ee7\u7eed\u5904\u7406\u540e\u7eed\u8ffd\u52a0\u3002\u5bf9 HDD \u540e\u7aef\u6765\u8bf4\uff0c\u8fd9\u4e00\u70b9\u5f88\u91cd\u8981\uff0c\u56e0\u4e3a follower \u7684\u77ac\u65f6\u6296\u52a8\u4e0d\u5e94\u8be5\u76f4\u63a5\u62d6\u6162\u6240\u6709 leader append\u3002\u540c\u6b65\u5065\u5eb7\u5ea6\u4e5f\u4f1a\u53cd\u8fc7\u6765\u5f71\u54cd\u5199\u5165\u3002Leader \u4f1a\u7ef4\u62a4 follower \u7684\u6700\u5927 blobId\u3001\u6700\u5927 offset \u548c\u66f4\u65b0\u65f6\u95f4\uff1b\u5f53 follower \u4e0d\u5b58\u5728\uff0c\u6216\u8005 leader log end offset \u4e0e follower max offset \u7684 gap \u8d85\u8fc7\u9608\u503c\u65f6\uff0c\u5199\u8def\u5f84\u53ef\u4ee5\u5c1d\u8bd5\u5207\u5230\u5176\u5b83\u5728\u7ebf\u3001\u53ef\u5199\u3001\u672a\u9ad8\u6c34\u4f4d\u7684 leader replica\uff0c\u907f\u514d\u7ee7\u7eed\u628a\u5199\u5165\u538b\u5230\u590d\u5236\u5df2\u7ecf\u660e\u663e\u843d\u540e\u7684\u5206\u533a\u4e0a\u3002<\/p>\n<h2>\u4e03\u3001Kafka \u63d2\u4ef6\u63a5\u5165\uff1a\u628a segment \u751f\u547d\u5468\u671f\u6620\u5c04\u6210 HV Blob<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798853\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>Kafka \u63a5\u5165 HorizonVault \u8d70\u7684\u662f Kafka Tiered Storage \u7684 RemoteStorageManager \u6269\u5c55\u70b9\u3002Kafka \u4e0b\u6c89\u4e00\u4e2a segment \u65f6\uff0c\u63d2\u4ef6\u628a log segment \u4e0a\u4f20\u6210 HV log blob\uff0c\u628a offset index\u3001time index\u3001leader epoch index\u3001transaction index \u7b49\u591a\u4e2a Kafka index \u5408\u5e76\u6210\u4e00\u4e2a HV index blob\uff0c\u5e76\u5728 manifest \u91cc\u8bb0\u5f55\u6bcf\u79cd IndexType \u5bf9\u5e94\u7684 offset \u548c size\u3002manifest \u4f1a\u5199\u56de Kafka \u7684 remote log metadata\uff0c\u6210\u4e3a\u540e\u7eed\u8bfb\u53d6\u548c\u5220\u9664\u7684\u5b9a\u4f4d\u4f9d\u636e\u3002<\/p>\n<p>\u8bfb\u53d6\u65f6\uff0cKafka \u4ecd\u7136\u62ff\u5230\u666e\u901a InputStream\u3002\u5e95\u5c42\u5982\u679c\u662f\u7b80\u5355 blob\uff0c\u53ef\u4ee5\u4ece cache\/HV \u62c9\u53d6\u540e\u6309\u8303\u56f4 slice\uff1b\u5982\u679c\u662f\u5927\u5bf9\u8c61 metadata blob\uff0c\u5219\u6839\u636e chunk metadata \u6309\u8303\u56f4\u9010 chunk \u8bfb\u53d6\uff0c\u5e76\u914d\u5408\u9884\u53d6\u3002<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798854\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u5220\u9664\u65f6\uff0cKafka \u8868\u8fbe remote segment \u751f\u547d\u5468\u671f\uff0c\u63d2\u4ef6\u89e3\u6790 manifest \u540e\u5220\u9664\u5bf9\u5e94\u7684 log blob \u548c index blob\u3002\u8fd9\u6837 Kafka \u4e0d\u9700\u8981\u7406\u89e3 HV \u5185\u90e8\u7684 log\/index\/change \u6587\u4ef6\u7ed3\u6784\uff0cHV \u4e5f\u4e0d\u9700\u8981\u4fb5\u5165 Kafka \u7684 remote metadata store\uff0c\u4e8c\u8005\u901a\u8fc7\u63d2\u4ef6\u548c manifest \u89e3\u8026\u3002<\/p>\n<h2>\u516b\u3001\u7cfb\u7edf\u4ef7\u503c\uff1a\u628a\u6027\u80fd\u3001\u6210\u672c\u548c\u7a33\u5b9a\u6027\u653e\u5728\u4e00\u8d77\u89e3\u51b3<\/h2>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047798855\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u56de\u5230\u7cfb\u7edf\u4ef7\u503c\uff0cHorizonVault \u7684\u5f3a\u70b9\u6765\u81ea\u4e00\u7ec4\u4e92\u76f8\u63a5\u4f4f\u7684\u673a\u5236\uff1a<\/p>\n<ul>\n<li>Broker \u628a\u8bf7\u6c42\u6253\u5230\u72b6\u6001\u5065\u5eb7\u7684 partition \u548c leader replica\u3002<\/li>\n<li>Meta \u8ba9\u8282\u70b9\u3001\u78c1\u76d8\u3001replica \u548c leader \u5206\u5e03\u5c3d\u91cf\u5747\u5300\u3002<\/li>\n<li>Store \u628a\u771f\u5b9e\u6570\u636e\u987a\u5e8f\u8ffd\u52a0\u5230 log\uff0c\u628a\u968f\u673a\u5b9a\u4f4d\u538b\u7f29\u5230\u5c0f\u7d22\u5f15\u3002<\/li>\n<li>DiskStore \u7528\u72b6\u6001\u3001\u6c34\u4f4d\u3001\u7ebf\u7a0b\u3001\u7f13\u5b58\u3001\u9650\u901f\u548c\u9694\u79bb\u7ba1\u7406\u5355\u76d8\u3002<\/li>\n<li>Network \u7528\u5f02\u6b65\u5904\u7406\u3001\u8d85\u65f6\u548c\u80cc\u538b\u4fdd\u62a4\u5165\u53e3\u3002<\/li>\n<li>HA \u7528 follower pull\u3001LogBatch \u56de\u653e\u548c ACK holder \u89e3\u8026\u541e\u5410\u4e0e\u786e\u8ba4\u8bed\u4e49\u3002<\/li>\n<li>Kafka \u63d2\u4ef6\u628a segment\/index \u751f\u547d\u5468\u671f\u6620\u5c04\u6210 HV blob \u548c manifest\uff0c\u8ba9 Kafka \u80fd\u4ee5\u539f\u751f Tiered Storage \u65b9\u5f0f\u63a5\u5165\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u673a\u5236\u4e32\u8d77\u6765\u4ee5\u540e\uff0cHorizonVault \u5448\u73b0\u51fa\u4e00\u5957\u56f4\u7ed5\u8d44\u6e90\u6c60\u8fd0\u884c\u7684\u95ed\u73af\uff1aMeta \u8d1f\u8d23\u628a\u8d44\u6e90\u653e\u5300\uff0cBroker \u8d1f\u8d23\u628a\u6d41\u91cf\u6253\u51c6\uff0cStore \u8d1f\u8d23\u628a\u6570\u636e\u987a\u5e8f\u5199\u7a33\uff0cDiskStore \u8d1f\u8d23\u628a\u5355\u76d8\u72b6\u6001\u7ba1\u4f4f\uff0cNetwork \u8d1f\u8d23\u628a\u5165\u53e3\u538b\u529b\u63a7\u4f4f\uff0cHA \u8d1f\u8d23\u628a\u526f\u672c\u8ffd\u5e73\uff0cKafka \u63d2\u4ef6\u8d1f\u8d23\u628a\u4e0a\u5c42 segment \u751f\u547d\u5468\u671f\u63a5\u8fdb\u6765\u3002<\/p>\n<p>\u8fd9\u5957\u95ed\u73af\u6700\u7ec8\u670d\u52a1\u7684\u662f\u540c\u4e00\u4e2a\u76ee\u6807\uff1a\u628a\u6027\u80fd\u3001\u6210\u672c\u548c\u7a33\u5b9a\u6027\u653e\u5728\u4e00\u8d77\u89e3\u51b3\u3002\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u5199\u5165\u6cbf\u7740\u987a\u5e8f\u8ffd\u52a0\u3001\u591a\u76d8\u5e76\u884c\u548c\u5f02\u6b65\u5904\u7406\u4e00\u8def\u63a8\u8fdb\uff0c\u901a\u7528 HDD \u7684\u5bb9\u91cf\u4f18\u52bf\u53ef\u4ee5\u88ab\u8f6c\u5316\u6210\u96c6\u7fa4\u7ea7\u541e\u5410\uff1b\u51fa\u73b0\u6162\u76d8\u3001\u6162\u526f\u672c\u3001\u8fde\u63a5\u79ef\u538b\u6216\u540c\u6b65 gap \u65f6\uff0c\u7cfb\u7edf\u53c8\u80fd\u628a\u95ee\u9898\u5c3d\u91cf\u9650\u5236\u5728\u67d0\u5757\u78c1\u76d8\u3001\u67d0\u4e2a\u526f\u672c\u3001\u67d0\u6761\u8fde\u63a5\u6216\u67d0\u4e00\u6b21\u8def\u7531\u9009\u62e9\u4e0a\u3002<\/p>\n<p>\u5bf9 Kafka \u8fdc\u7a0b\u5b58\u50a8\u6765\u8bf4\uff0c\u8fd9\u4e00\u70b9\u6bd4\u5355\u7eaf\u8ffd\u6c42\u67d0\u4e2a benchmark \u6570\u5b57\u66f4\u91cd\u8981\u3002\u8fdc\u7a0b\u5b58\u50a8\u627f\u63a5\u7684\u662f\u957f\u671f\u5b58\u5728\u3001\u6301\u7eed\u589e\u957f\u3001\u9700\u8981\u968f\u65f6\u8bfb\u56de\u7684\u6570\u636e\uff0c\u5b83\u65e2\u8981\u5e2e\u52a9 Kafka \u964d\u4f4e\u672c\u5730\u78c1\u76d8\u538b\u529b\uff0c\u4e5f\u4e0d\u80fd\u628a\u51b7\u6570\u636e\u53d8\u6210\u65b0\u7684\u7a33\u5b9a\u6027\u98ce\u9669\u3002HorizonVault \u7684\u8bbe\u8ba1\u4ef7\u503c\u5c31\u5728\u8fd9\u91cc\uff1a\u7528\u6e05\u6670\u7684\u8d44\u6e90\u6a21\u578b\u548c\u5206\u5c42\u9694\u79bb\uff0c\u628a\u4e00\u7ec4\u901a\u7528 HDD \u7ec4\u7ec7\u6210\u53ef\u8c03\u5ea6\u3001\u53ef\u6062\u590d\u3001\u53ef\u6269\u5c55\u7684\u8fdc\u7a0b\u5b58\u50a8\u8d44\u6e90\u6c60\uff0c\u8ba9 Kafka \u7684\u6570\u636e\u751f\u547d\u5468\u671f\u4ece\u672c\u5730\u78c1\u76d8\u81ea\u7136\u5ef6\u4f38\u5230\u8fdc\u7aef\u5b58\u50a8\u3002<\/p>\n<h2>\u5f80\u671f\u56de\u987e<\/h2>\n<p>1.<a href=\"https:\/\/segmentfault.com\/a\/e9b2f854bfa96d8988f26da9c5f4f64f17\" target=\"_blank\" rel=\"noopener noreferrer\">Claude Code Harness \u5de5\u7a0b\uff1a\u6570\u4ed3\u4fa7\u843d\u5730\u65b9\u6848\uff5c\u5f97\u7269\u6280\u672f<\/a><br \/>2.<a href=\"https:\/\/segmentfault.com\/a\/1190000047765568\" target=\"_blank\" rel=\"noopener noreferrer\">BP Claw \u7834\u89e3 AI \u7f16\u7801\u8f93\u5165\u96be\u9898 \u2014\u2014FlinkSpec \u9700\u6c42\u667a\u80fd\u5316\u5b9e\u8df5\uff5c\u5f97\u7269\u6280\u672f<\/a><br \/>3.<a href=\"https:\/\/segmentfault.com\/a\/1190000047749452\" target=\"_blank\" rel=\"noopener noreferrer\">\u57fa\u4e8e Harness + SDD + \u591a\u4ed3\u7ba1\u7406\u6a21\u5f0f\u7684 AI \u5168\u6808\u5f00\u53d1\u5b9e\u8df5\uff5c\u5f97\u7269\u6280\u672f<\/a><br \/>4.<a href=\"https:\/\/segmentfault.com\/a\/1190000047739248\" target=\"_blank\" rel=\"noopener noreferrer\">\u901a\u7528 AI Agent \u9a71\u52a8\u7f51\u5173\u8def\u7531\u5b89\u5168\u5ba1\u8ba1\u5b9e\u8df5\uff5c\u5f97\u7269\u6280\u672f<\/a><br \/>5.<a href=\"https:\/\/segmentfault.com\/a\/1190000047725669\" target=\"_blank\" rel=\"noopener noreferrer\">AI\u9a71\u52a8\uff1a\u4ece\u8fd0\u8425\u884c\u4e3a\u5230\u81ea\u52a8\u5316\u7528\u4f8b\u7684\u667a\u80fd\u5316\u5b9e\u8df5\uff5c\u5f97\u7269\u6280\u672f<\/a><\/p>\n<h2>\u6587 \/\u82f1\u6770<\/h2>\n<p>\u5173\u6ce8\u5f97\u7269\u6280\u672f\uff0c\u6bcf\u5468\u66f4\u65b0\u6280\u672f\u5e72\u8d27<br \/>\u8981\u662f\u89c9\u5f97\u6587\u7ae0\u5bf9\u4f60\u6709\u5e2e\u52a9\u7684\u8bdd\uff0c\u6b22\u8fce\u8bc4\u8bba\u8f6c\u53d1\u70b9\u8d5e\uff5e<br \/>\u672a\u7ecf\u5f97\u7269\u6280\u672f\u8bb8\u53ef\u4e25\u7981\u8f6c\u8f7d\uff0c\u5426\u5219\u4f9d\u6cd5\u8ffd\u7a76\u6cd5\u5f8b\u8d23\u4efb\u3002<\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047798832\">https:\/\/segmentfault.com\/a\/1190000047798832<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>HorizonVault \u662f\u4e2d\u95f4\u4ef6\u56e2\u961f\u81ea\u7814\u7684\u4e00\u6b3e\u9ad8\u541e\u5410\u5206\u5e03\u5f0f\u5b58\u50a8\u5f15\u64ce\uff0c\u4e3b\u8981\u9762\u5411 Kafka \u8fdc\u7a0b\u5b58\u50a8\u3001\u51b7\/\u6e29\u6570 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10021375","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10021375"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021375\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10021375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10021375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10021375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}