Golang中处理版本信息

Golang中的版本信息管理

我们都知道在一些Golang写的程序中,默认会有version-v相关的参数来输出软件版本信息,这些版本信息里可能包含软件版本,git中的commit记录,构建时间、构建环境等信息,那么这些信息都是如何在Golang程序中进行维护和管理的呢?请看👇.

示例

比如我们常用的Golang开发的程序是这样输出版本相关信息的:

 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
30
31
# k8s的客户端程序版本
$ kubectl version -o json --client
{
  "clientVersion": {
    "major": "1",
    "minor": "10",
    "gitVersion": "v1.10.11",
    "gitCommit": "637c7e288581ee40ab4ca210618a89a555b6e7e9",
    "gitTreeState": "clean",
    "buildDate": "2018-11-26T14:38:32Z",
    "goVersion": "go1.9.3",
    "compiler": "gc",
    "platform": "darwin/amd64"
  }
}

# docker的客户端程序版本
$ docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

# minio的客户端程序版本
$ minio --version
minio version RELEASE.2020-04-10T03-34-42Z

Kafka运维神器之gokafka

Kafka运维神器

在Kafka集群运维过程中,我们通常会借用一些开源工具来完成kafka的日常运维需求和相关问题排查,接下来介绍几个常用的kafka运维神器。

Kafka在Zookeeper中的存储结构

我们都知道,自从Kafka诞生之际,就一直使用Zookeeper服务来进行kafka集群的元数据和状态管理,虽然在KIP-500中有提议未来将移除Zookeeper的依赖,使用Raft协议来实现新的元数据和状态管理,但在这之前,我们仍然需要对kafka集群的整个元数据和状态有一定理解,才能更好的维护和保障kafka集群。

前言

在kafka集群中,ZooKeeper集群用于存放集群元数据成员管理Controller 选举,以及其他一些管理类任务

  • 存放元数据: 是指主题分区的所有数据都保存在 ZooKeeper 中,且以它保存的数据为权威,其他“人” 都要与它保持对齐。
  • 成员管理: 是指 Broker 节点的注册、注销以及属性变更。
  • Controller 选举: 是指选举集群 Controller,而其他管理类任务包括但不限于主题删除、参数配置。