我当前带有 3 个 Kafka 代理的 Kafka 部署文件如下所示:
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: kafka
spec:
selector:
matchLabels:
app: kafka
serviceName: kafka-headless
replicas: 3
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka-instance
image: wurstmeister/kafka
ports:
- containerPort: 9092
env:
- name: KAFKA_ADVERTISED_PORT
value: "9092"
- name: KAFKA_ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: KAFKA_ZOOKEEPER_CONNECT
value: "zookeeper-0.zookeeper-headless.default.svc.cluster.local:2181,\
zookeeper-1.zookeeper-headless.default.svc.cluster.local:2181,\
zookeeper-2.zookeeper-headless.default.svc.cluster.local:2181"
- name: BROKER_ID_COMMAND
value: "hostname | awk -F '-' '{print $2}'"
- name: KAFKA_CREATE_TOPICS
value: hello:2:1 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,从数据存储区获取和提取信息.
它可以在任何地方使用,但是当我从Kubernetes Engine集群中运行它时,我得到了这个输出:
Error from Get()
rpc error: code = PermissionDenied desc = Request had insufficient authentication scopes.
Error from Put()
rpc error: code = PermissionDenied desc = Request had insufficient authentication scopes.
Run Code Online (Sandbox Code Playgroud)
我正在使用cloud.google.com/go/datastore包和Go语言.
我不知道为什么我收到此错误,因为应用程序在其他地方工作正常.
更新:
正在寻找答案,我在Google网上论坛中发现了这条评论:
为了从GCE使用Cloud Datastore,需要为实例配置一些额外的范围.这些不能添加到现有GCE实例,但您可以使用以下Cloud SDK命令创建新实例:
gcloud compute instances创建hello-datastore --project --zone --scopes datastore userinfo-email
这是否意味着默认情况下我无法使用GKE中的数据存储区?
更新2:
我可以看到,在创建我的集群时,我没有启用任何权限(默认情况下对大多数服务禁用).我想这就是造成这个问题的原因:

奇怪的是,即使它被禁用(使用cloudsql_proxy容器),我也可以使用CloudSQL .
我明白那个:
break - 停止进一步执行循环结构.
continue - 跳过循环体的其余部分并开始下一次迭代.
但是,当与标签结合使用时,这些陈述有何不同?
换句话说,这三个循环之间有什么区别:
Loop:
for i := 0; i < 10; i++ {
if i == 5 {
break Loop
}
fmt.Println(i)
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 1 2 3 4
Loop:
for i := 0; i < 10; i++ {
if i == 5 {
continue Loop
}
fmt.Println(i)
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 1 2 3 4 6 7 8 9
Loop:
for i := 0; i < 10; i++ {
if i == 5 { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Go找到从文件中读取前两个字节的好方法.
我.zip在当前目录中有一些文件,与其他文件混合在一起.
我想循环遍历目录中的所有文件,并检查前两个字节是否包含正确的.zip标识符,即50 4B.
使用标准库而不必读取整个文件的好方法是什么?
通过io我设法找到的包中的可用功能:
func LimitReader(r Reader, n int64) Reader
Run Code Online (Sandbox Code Playgroud)
这似乎符合我的描述,它从Reader(如何得到Reader?)读取,但在n字节后停止.因为我对Go很新,所以我不确定如何去做.
我的main函数打开一个数据库连接:
func main() {
db, err := sql.Open("sqlite3", "./house.db")
checkErr(err)
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我想创建一个函数,允许我根据传递的结构向数据库添加一行:
func addRow(row Room) error {
stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
_, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor)
return err
}
Run Code Online (Sandbox Code Playgroud)
但显然我不能这样做,因为addRow()函数不知道是什么db.
我该如何使这个功能起作用?我是否应该在主要功能之外打开数据库?