切换导航条
此项目
正在载入...
登录
message_bus
/
message_bus_service
·
提交
转到一个项目
GitLab
转到群组
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
邮件补丁
差异文件
浏览文件
作者
朱兆平
4 years ago
提交
dc748c949247b7154f2387ead06ed74d37bcf907
1 个父辈
1a0ff93a
增加清除TOPIC消息
隐藏空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
71 行增加
和
3 行删除
src/main/java/com/sunyo/wlpt/message/bus/service/bean/KafkaInitialConfiguration.java
src/main/java/com/sunyo/wlpt/message/bus/service/controller/BusQueueController.java
src/main/java/com/sunyo/wlpt/message/bus/service/service/KafkaService.java
src/main/java/com/sunyo/wlpt/message/bus/service/service/kafka/KafkaServiceImp.java
src/main/java/com/sunyo/wlpt/message/bus/service/bean/KafkaInitialConfiguration.java
查看文件 @
dc748c9
...
...
@@ -48,7 +48,7 @@ public class KafkaInitialConfiguration {
public
KafkaConsumer
<
String
,
String
>
consumer
(){
Properties
props
=
new
Properties
();
props
.
put
(
"bootstrap.servers"
,
ServerListForMap
());
props
.
put
(
"group.id"
,
"
test
"
);
props
.
put
(
"group.id"
,
"
systemGroup
"
);
props
.
put
(
"enable.auto.commit"
,
"true"
);
props
.
put
(
"auto.offset.reset"
,
"earliest"
);
props
.
put
(
"auto.commit.interval.ms"
,
"1000"
);
...
...
src/main/java/com/sunyo/wlpt/message/bus/service/controller/BusQueueController.java
查看文件 @
dc748c9
...
...
@@ -7,6 +7,7 @@ import com.sunyo.wlpt.message.bus.service.response.ResultJson;
import
com.sunyo.wlpt.message.bus.service.service.BusQueueService
;
import
com.sunyo.wlpt.message.bus.service.service.KafkaService
;
import
com.sunyo.wlpt.message.bus.service.service.UserInfoService
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.kafka.clients.admin.AdminClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -199,4 +200,12 @@ public class BusQueueController {
return
new
ResultJson
<
List
<
ConsumerGroupOffsets
>>(
"200"
,
"success"
,
result
);
}
@PostMapping
(
"clean"
)
public
ResultJson
clean
(
@RequestBody
BusQueue
busQueue
){
if
(
StringUtils
.
isNotBlank
(
busQueue
.
getQueueName
())){
boolean
result
=
kafkaService
.
delTopicPartitionMessage
(
busQueue
.
getQueueName
());
return
result
?
new
ResultJson
(
"200"
,
"success"
):
new
ResultJson
(
"400"
,
"faild"
);
}
return
new
ResultJson
(
"400"
,
"缺少topic信息"
);
}
}
...
...
src/main/java/com/sunyo/wlpt/message/bus/service/service/KafkaService.java
查看文件 @
dc748c9
...
...
@@ -6,9 +6,24 @@ import java.util.List;
public
interface
KafkaService
{
/**
* 增加一个TOPIC
* @param TopicName
* @param partitionNum
* @return
*/
boolean
addTopic
(
String
TopicName
,
int
partitionNum
);
public
void
updateAdminclient
();
/**
* topic信息消费状况监控监控
* @return
*/
List
<
ConsumerGroupOffsets
>
queueMonitor
();
/**
* 清空topic里面的消息
*/
boolean
delTopicPartitionMessage
(
String
topicName
);
}
...
...
src/main/java/com/sunyo/wlpt/message/bus/service/service/kafka/KafkaServiceImp.java
查看文件 @
dc748c9
...
...
@@ -4,16 +4,17 @@ package com.sunyo.wlpt.message.bus.service.service.kafka;
import
com.sunyo.wlpt.message.bus.service.domain.BusServer
;
import
com.sunyo.wlpt.message.bus.service.mapper.BusServerMapper
;
import
com.sunyo.wlpt.message.bus.service.mapper.ConsumerGroupMapper
;
import
com.sunyo.wlpt.message.bus.service.model.ConsumerGroup
;
import
com.sunyo.wlpt.message.bus.service.model.ConsumerGroupOffsets
;
import
com.sunyo.wlpt.message.bus.service.service.KafkaService
;
import
kafka.tools.ConsoleConsumer
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.kafka.clients.admin.*
;
import
org.apache.kafka.clients.consumer.Consumer
;
import
org.apache.kafka.clients.consumer.KafkaConsumer
;
import
org.apache.kafka.clients.consumer.OffsetAndMetadata
;
import
org.apache.kafka.common.KafkaFuture
;
import
org.apache.kafka.common.PartitionInfo
;
import
org.apache.kafka.common.TopicPartition
;
import
org.apache.kafka.common.TopicPartitionReplica
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.kafka.core.KafkaAdmin
;
import
org.springframework.stereotype.Service
;
...
...
@@ -176,4 +177,47 @@ public class KafkaServiceImp implements KafkaService {
return
KAFKA_SERVERS
;
}
@Override
public
boolean
delTopicPartitionMessage
(
String
topic
)
{
Map
<
TopicPartition
,
RecordsToDelete
>
recordsToDeleteMap
=
new
HashMap
<
TopicPartition
,
RecordsToDelete
>(
16
);
DeleteRecordsResult
deleteRecordsResult
=
null
;
//获取topic的partition信息
Map
<
Integer
,
Long
>
partitionInfoMap
=
getPartitionsForTopic
(
topic
);
for
(
Map
.
Entry
<
Integer
,
Long
>
entry2
:
partitionInfoMap
.
entrySet
())
{
TopicPartition
topicPartition
=
new
TopicPartition
(
topic
,
(
int
)
entry2
.
getKey
());
RecordsToDelete
recordsToDelete
=
RecordsToDelete
.
beforeOffset
((
long
)
entry2
.
getValue
());
recordsToDeleteMap
.
put
(
topicPartition
,
recordsToDelete
);
}
deleteRecordsResult
=
KAFKA_ADMIN_CLIENT
.
deleteRecords
((
Map
)
recordsToDeleteMap
);
Map
<
TopicPartition
,
KafkaFuture
<
DeletedRecords
>>
lowWatermarks
=
(
Map
<
TopicPartition
,
KafkaFuture
<
DeletedRecords
>>)
deleteRecordsResult
.
lowWatermarks
();
lowWatermarks
.
entrySet
().
forEach
(
entry
->
{
try
{
log
.
info
(
"删除信息:TOPIC-{},partition-{},lastoffset-{},删除结果-{}"
,
entry
.
getKey
().
topic
(),
entry
.
getKey
().
partition
(),
((
DeletedRecords
)((
KafkaFuture
)
entry
.
getValue
()).
get
()).
lowWatermark
(),
((
KafkaFuture
)
entry
.
getValue
()).
isDone
());
}
catch
(
InterruptedException
|
ExecutionException
ex2
)
{
log
.
error
(
ex2
.
toString
());
}
});
return
true
;
}
private
Map
<
Integer
,
Long
>
getPartitionsForTopic
(
String
topic
)
{
Collection
<
PartitionInfo
>
partitionInfos
=
(
Collection
<
PartitionInfo
>)
KAFKA_CONSUMER
.
partitionsFor
(
topic
);
List
<
TopicPartition
>
tp
=
new
ArrayList
<
TopicPartition
>();
List
<
TopicPartition
>
list
=
new
ArrayList
<>();
Map
<
Integer
,
Long
>
map
=
new
HashMap
<>(
16
);
partitionInfos
.
forEach
(
str
->
{
list
.
add
(
new
TopicPartition
(
topic
,
str
.
partition
()));
KAFKA_CONSUMER
.
assign
((
Collection
)
list
);
KAFKA_CONSUMER
.
seekToEnd
((
Collection
)
list
);
map
.
put
(
str
.
partition
(),
KAFKA_CONSUMER
.
position
(
new
TopicPartition
(
topic
,
str
.
partition
())));
});
return
map
;
}
}
...
...
请
注册
或
登录
后发表评论