我们有一个定制的Golang脚本来向PubSub发布消息。
client, err := pubsub.NewClient(ctx, GOOGLE_CLOUD_PROJECT))然后,我们使用同一个客户端发布多达40个主题。
topic1 := client.Topic(topicName)
topic1.PublishSettings = pubsub.PublishSettings{
DelayThreshold: 10 * time.Millisecond,
CountThreshold: 1000,
NumGoroutines: 70 * runtime.GOMAXPROCS(0),
ByteThreshold: 1e6,
Timeout: 60 * time.Second,
}
topic2 := client.Topic(topicName)
topic2.PublishSettings = pubsub.PublishSettings{
DelayThreshold: 10 * time.Millisecond,
CountThreshold: 1000,
NumGoroutines: 70 * runtime.GOMAXPROCS(0),
ByteThreshold: 1e6,
Timeout: 60 * time.Second,
}
.
.
.然后根据一定的条件发布到主题的1。我们的publisher循环如下所示
semaphore := make(chan int, 3000)
for i := 0; i < totalMessages; i++ {
semaphore <- 1
go func(topic *pubsub.Topic, semaphore chan int) {
data := []byte(_RandStringBytes(messageLengthInBytes))
msg := &pubsub.Message{
Data: data,
}
if _, err := topic.Publish(ctx, msg).Get(ctx); err != nil {
log.Fatalf("Could not publish message: %v", err)
}
<-semaphore
}(topic, semaphore)
}我们使用3000 Goroutines向主题发布消息,并同步等待消息被确认,这意味着在某一时刻只有3000条消息在飞行中/在客户端等待确认。
我们目前的发布速度接近5K RPS,但我们的延迟高达30秒。
下面是我从我们的Datadog仪表板编译的统计数据。
Publish Latency. Number of Messages
0-1 1877
1-2 1990
2-3 2661
2-3 2149
5-10 10323
10-15 4013
15-20 10322
20-25 3034
25-30 925
> 30 1901当我编写一个小的基准脚本将消息发布到单个主题时,来自同一台机器的平均延迟是147 was。
我试着调整每个主题的发行者设置,但这并没有帮助。
,现在我有几个问题。。
。
发布于 2020-04-02 13:08:59
你试过批量出版吗?
发布(主题,[]消息{1,2,3,4,…})
https://stackoverflow.com/questions/60987316
复制相似问题