Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
a3c17604
M
milvus
项目概览
milvus
/
milvus
9 个月 前同步成功
通知
260
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
a3c17604
编写于
8月 13, 2023
作者:
E
Enwei Jiao
提交者:
GitHub
8月 13, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix kafka producer init many times (#26314)
Signed-off-by:
N
Enwei Jiao
<
enwei.jiao@zilliz.com
>
上级
83910593
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
10 deletion
+25
-10
pkg/mq/msgstream/mqwrapper/kafka/kafka_client.go
pkg/mq/msgstream/mqwrapper/kafka/kafka_client.go
+25
-10
未找到文件。
pkg/mq/msgstream/mqwrapper/kafka/kafka_client.go
浏览文件 @
a3c17604
...
@@ -6,16 +6,21 @@ import (
...
@@ -6,16 +6,21 @@ import (
"sync"
"sync"
"github.com/confluentinc/confluent-kafka-go/kafka"
"github.com/confluentinc/confluent-kafka-go/kafka"
"go.uber.org/atomic"
"go.uber.org/zap"
"go.uber.org/zap"
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/metrics"
"github.com/milvus-io/milvus/pkg/metrics"
"github.com/milvus-io/milvus/pkg/mq/msgstream/mqwrapper"
"github.com/milvus-io/milvus/pkg/mq/msgstream/mqwrapper"
"github.com/milvus-io/milvus/pkg/util/conc"
"github.com/milvus-io/milvus/pkg/util/paramtable"
"github.com/milvus-io/milvus/pkg/util/paramtable"
"github.com/milvus-io/milvus/pkg/util/timerecord"
"github.com/milvus-io/milvus/pkg/util/timerecord"
)
)
var
producer
*
kafka
.
Producer
var
(
producer
atomic
.
Pointer
[
kafka
.
Producer
]
sf
conc
.
Singleflight
[
*
kafka
.
Producer
]
)
var
once
sync
.
Once
var
once
sync
.
Once
...
@@ -85,15 +90,21 @@ func cloneKafkaConfig(config kafka.ConfigMap) *kafka.ConfigMap {
...
@@ -85,15 +90,21 @@ func cloneKafkaConfig(config kafka.ConfigMap) *kafka.ConfigMap {
}
}
func
(
kc
*
kafkaClient
)
getKafkaProducer
()
(
*
kafka
.
Producer
,
error
)
{
func
(
kc
*
kafkaClient
)
getKafkaProducer
()
(
*
kafka
.
Producer
,
error
)
{
config
:=
kc
.
newProducerConfig
()
if
p
:=
producer
.
Load
();
p
!=
nil
{
producer
,
err
:=
kafka
.
NewProducer
(
config
)
return
p
,
nil
if
err
!=
nil
{
log
.
Error
(
"create sync kafka producer failed"
,
zap
.
Error
(
err
))
return
nil
,
err
}
}
once
.
Do
(
func
()
{
p
,
err
,
_
:=
sf
.
Do
(
"kafka_producer"
,
func
()
(
*
kafka
.
Producer
,
error
)
{
if
p
:=
producer
.
Load
();
p
!=
nil
{
return
p
,
nil
}
config
:=
kc
.
newProducerConfig
()
p
,
err
:=
kafka
.
NewProducer
(
config
)
if
err
!=
nil
{
log
.
Error
(
"create sync kafka producer failed"
,
zap
.
Error
(
err
))
return
nil
,
err
}
go
func
()
{
go
func
()
{
for
e
:=
range
p
roducer
.
Events
()
{
for
e
:=
range
p
.
Events
()
{
switch
ev
:=
e
.
(
type
)
{
switch
ev
:=
e
.
(
type
)
{
case
kafka
.
Error
:
case
kafka
.
Error
:
// Generic client instance-level errors, such as broker connection failures,
// Generic client instance-level errors, such as broker connection failures,
...
@@ -109,9 +120,13 @@ func (kc *kafkaClient) getKafkaProducer() (*kafka.Producer, error) {
...
@@ -109,9 +120,13 @@ func (kc *kafkaClient) getKafkaProducer() (*kafka.Producer, error) {
}
}
}
}
}()
}()
producer
.
Store
(
p
)
return
p
,
nil
})
})
if
err
!=
nil
{
return
producer
,
nil
return
nil
,
err
}
return
p
,
nil
}
}
func
(
kc
*
kafkaClient
)
newProducerConfig
()
*
kafka
.
ConfigMap
{
func
(
kc
*
kafkaClient
)
newProducerConfig
()
*
kafka
.
ConfigMap
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录