topic 限流

This commit is contained in:
许晓东
2021-11-27 19:46:06 +08:00
parent 4639335a9d
commit 34c87997d1
9 changed files with 263 additions and 8 deletions

View File

@@ -0,0 +1,156 @@
<template>
<a-modal
:title="topic + '限流'"
:visible="show"
:width="1000"
:mask="false"
:maskClosable="false"
okText="确认"
cancelText="取消"
:destroyOnClose="true"
@cancel="handleCancel"
@ok="ok"
>
<div>
<a-spin :spinning="loading">
<a-form
:form="form"
:label-col="{ span: 5 }"
:wrapper-col="{ span: 12 }"
>
<a-form-item label="选择分区">
<a-select
mode="multiple"
option-filter-prop="children"
v-decorator="[
'partitions',
{
initialValue: [-1],
rules: [{ required: true, message: '请选择一个分区!' }],
},
]"
placeholder="请选择一个分区"
>
<a-select-option v-for="v in partitions" :key="v" :value="v">
<span v-if="v == -1">全部</span> <span v-else>{{ v }}</span>
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="操作">
<a-radio-group
v-decorator="[
'operation',
{
initialValue: 'ON',
rules: [{ required: true, message: '请选择一个操作!' }],
},
]"
>
<a-radio value="ON"> 开启限流配置 </a-radio>
<a-radio value="OFF"> 移除限流配置 </a-radio>
</a-radio-group>
</a-form-item>
</a-form>
<hr />
<h4>说明:</h4>
该限流表示topic的副本的在不同broker之间数据同步占用带宽的限制该配置是一个topic级别的配置项。如未配置速率即使配置了这个限流也不会进行实际的限流操作。配置速率在
<span style="color: red">运维->配置限流</span> 处进行操作.
<h4>如何检查是否对哪些分区启用限流:</h4>
topic的限流是通过下面这两项配置的
<ul>
<li>leader.replication.throttled.replicas</li>
<li>follower.replication.throttled.replicas</li>
</ul>
只需通过
<strong>属性配置</strong>
查看这两项配置的值,格式为:"0:0,1:0"左侧为分区右侧为broker
id。示例表示[分区0的副本在broker 0上分区1的副本在broker 0上]。
</a-spin>
</div>
</a-modal>
</template>
<script>
import request from "@/utils/request";
import { KafkaTopicApi } from "@/utils/api";
import notification from "ant-design-vue/lib/notification";
export default {
name: "ConfigTopicThrottle",
props: {
visible: {
type: Boolean,
default: false,
},
topic: {
type: String,
default: "",
},
},
data() {
return {
show: this.visible,
loading: false,
form: this.$form.createForm(this, { name: "RemoveThrottleForm" }),
partitions: [],
};
},
watch: {
visible(v) {
this.show = v;
if (this.show) {
this.getPartitionInfo();
}
},
},
methods: {
handleCancel() {
this.$emit("closeThrottleDialog", { refresh: false });
},
getPartitionInfo() {
this.loading = true;
request({
url: KafkaTopicApi.getPartitionInfo.url + "?topic=" + this.topic,
method: KafkaTopicApi.getPartitionInfo.method,
}).then((res) => {
this.loading = false;
if (res.code != 0) {
notification.error({
message: "error",
description: res.msg,
});
} else {
this.partitions = res.data.map((e) => e.partition);
this.partitions.splice(0, 0, -1);
}
});
},
ok() {
this.form.validateFields((err, values) => {
if (!err) {
const data = Object.assign({}, values, {topic: this.topic});
this.loading = true;
request({
url: KafkaTopicApi.configThrottle.url,
method: KafkaTopicApi.configThrottle.method,
data: data,
}).then((res) => {
this.loading = false;
if (res.code == 0) {
this.$message.success(res.msg);
this.$emit("closeThrottleDialog", { refresh: false });
} else {
notification.error({
message: "error",
description: res.msg,
});
}
});
}
});
},
},
};
</script>
<style scoped></style>

View File

@@ -116,7 +116,7 @@
size="small"
href="javascript:;"
class="operation-btn"
@click="openThrottleDialog"
@click="openThrottleDialog(record.name)"
>限流
</a-button>
</div>
@@ -152,6 +152,11 @@
:topic="selectDetail.resourceName"
@closeUpdateReplicaDialog="closeUpdateReplicaDialog"
></UpdateReplica>
<ConfigTopicThrottle
:visible="showThrottleDialog"
:topic="selectDetail.resourceName"
@closeThrottleDialog="closeThrottleDialog"
></ConfigTopicThrottle>
</div>
</a-spin>
</div>
@@ -167,6 +172,7 @@ import AddPartition from "@/views/topic/AddPartition";
import ConsumedDetail from "@/views/topic/ConsumedDetail";
import TopicConfig from "@/views/topic/TopicConfig";
import UpdateReplica from "@/views/topic/UpdateReplica";
import ConfigTopicThrottle from "@/views/topic/ConfigTopicThrottle";
export default {
name: "Topic",
@@ -177,6 +183,7 @@ export default {
ConsumedDetail,
TopicConfig,
UpdateReplica,
ConfigTopicThrottle,
},
data() {
return {
@@ -199,6 +206,7 @@ export default {
showConsumedDetailDialog: false,
showTopicConfigDialog: false,
showUpdateReplicaDialog: false,
showThrottleDialog: false,
};
},
methods: {
@@ -289,8 +297,12 @@ export default {
openMessageStatsDialog() {
this.$message.info("此功能尚不支持");
},
openThrottleDialog() {
this.$message.info("此功能尚不支持");
openThrottleDialog(topic) {
this.showThrottleDialog = true;
this.selectDetail.resourceName = topic;
},
closeThrottleDialog() {
this.showThrottleDialog = false;
},
},
created() {