go语言如何使用腾讯云的Ckafka


go语言如何使用腾讯云的kafka

1
参考地址:https://cloud.tencent.com/document/product/597/54819

配置

  1. 点击实例列表,点击实例名称进入详情
    列表
  2. 添加路由策略,使用公网
    路由
    路由
  3. 新建topic
    topic
  4. 新建acl读写用户
    acl用户
    acl用户
  5. 配置acl策略,选择topic,允许第4步新建的用户
    acl策略

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
代码
获取demo https://github.com/TencentCloud/ckafka-sdk-demo/tree/main/gokafkademo/PUBLIC_SASL

go mod tidy
修改config/kafka.json,文件的内容
{
"topic": [
"新建topic时填写的名称"
],
"sasl": {
"username": "新建acl用户时填写的用户名",
"password": "新建acl用户时填写的密码",
"instanceId":"kafka的实例id,在基本信息页面互殴去"
},
"bootstrapServers": [
"新建接入方式后,网络那一列的英文地址"
],
"consumerGroupId": "随便填写"
}

demo中的producer是发送的代码,consumer是消化的代码

运行

1
2
3
4
5
6
7
8
9
10
kafka.NewProducer是基于CGO和librdkafka的,不安装librdkafka依赖无法运行,会出现undefined: kafka.NewProducer之类的报错
macos下使用 brew install librdkafka安装

运行:CGO_ENABLED=1 go run main.go
编译:CGO_ENABLED=1 go build

CGO_ENABLED=1强行调用C语言的依赖

运行producer的代码,可以在消息查询中获取消息
运行consumer的代码,可以获取通过producer推送的消息

查看发送成功的消息

消息查询

查看消费组

消息查询

交叉编译

1
2
3
4
编译到linux amd64架构,使用docker,需要较长的时间
创建导出的目录 mkdir -p out
修改导出目录权限 chmod -R 777 out
交叉编译 docker buildx build --platform=linux/amd64 -o type=local,dest=./out .

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FROM --platform=linux/amd64 golang:1.24 AS builder

# 安装你需要的librdkafka依赖
RUN apt-get update && apt-get install -y librdkafka-dev

WORKDIR /app

# 设置代理
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

COPY go.mod ./
COPY go.sum ./
RUN go mod download

# 复制源码
COPY . .

# 设置环境变量,启用CGO,目标为linux/amd64
ENV CGO_ENABLED=1
ENV GOOS=linux
ENV GOARCH=amd64

# 编译,根据实际文件位置修改
RUN go build -o myapp consumer/main.go

# 只导出最终的可执行文件
FROM scratch AS export-stage
COPY --from=builder /app/myapp /myapp