golang kafka client

本文介绍如何使用Confluent-Kafka-Go客户端进行Apache Kafka开发,包括环境搭建、编译安装及示例代码。Confluent-Kafka-Go是官方推荐的Golang客户端,稳定且易于使用。

针对golang的 kafka client 有很多开源package,例如sarama, confluent等等。在使用sarama 包时,高并发中偶尔遇到crash。于是改用confluent-kafka-go,其简单易用,并且表现稳定。

本文主要介绍confluent-kafka-go的使用方法。
confluent-kafka-go,是kafka官网推荐的golang package。

confluent-kafka-go is Confluent’s Golang client for Apache Kafka and the Confluent Platform.

编译环境搭建

安装librdkafka

下载

$ git clone https://github.com/edenhill/librdkafka.git
$ cd librdkafka

配置、编译、安装

$ ./configure --prefix /usr
$ make
$ sudo make install

配置PKG_CONFIG_PATH

在文件~/.bashrc 末尾添加

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

下载go client
$ go get -u github.com/confluentinc/confluent-kafka-go/kafka

自动下载到GOPATH目录下,也可到github上自行下载,然后放到GOPATH中。

Example

// Example function-based Apache Kafka producer
package main

/**
 * Copyright 2016 Confluent Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import (
    "fmt"
    "github.com/confluentinc/confluent-kafka-go/kafka"
    "os"
)

func main() {

    if len(os.Args) != 3 {
        fmt.Fprintf(os.Stderr, "Usage: %s <broker> <topic>\n",
            os.Args[0])
        os.Exit(1)
    }

    broker := os.Args[1]
    topic := os.Args[2]

    p, err := kafka.NewProducer(&kafka.ConfigMap{"bootstrap.servers": broker})

    if err != nil {
        fmt.Printf("Failed to create producer: %s\n", err)
        os.Exit(1)
    }

    fmt.Printf("Created Producer %v\n", p)

    // Optional delivery channel, if not specified the Producer object's
    // .Events channel is used.
    deliveryChan := make(chan kafka.Event)

    value := "Hello Go!"
    err = p.Produce(&kafka.Message{TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny}, Value: []byte(value)}, deliveryChan)

    e := <-deliveryChan
    m := e.(*kafka.Message)

    if m.TopicPartition.Error != nil {
        fmt.Printf("Delivery failed: %v\n", m.TopicPartition.Error)
    } else {
        fmt.Printf("Delivered message to topic %s [%d] at offset %v\n",
            *m.TopicPartition.Topic, m.TopicPartition.Partition, m.TopicPartition.Offset)
    }

    close(deliveryChan)
}

注意:
如果需要链接静态库,可删除/usr/lib/下面关于rdkafka的动态库文件(.so文件)。然后,go build编译时加上选项 –tags static
例如:

go build -tags static produer.go

更多example,可参考
https://github.com/confluentinc/confluent-kafka-go/tree/master/examples

参考

https://github.com/confluentinc/confluent-kafka-go

Golang 中建立与 Kafka 的连接,你可以使用第三方库(如 sarama)来实现。下面是一个示例代码: ```go package main import ( "fmt" "log" "os" "github.com/Shopify/sarama" ) func main() { // Kafka 集群的地址和端口 brokerList := []string{"localhost:9092"} // 创建 Kafka 生产者配置 config := sarama.NewConfig() config.Version = sarama.V2_8_0_0 config.ClientID = "my-kafka-client" // 建立与 Kafka 集群的连接 client, err := sarama.NewClient(brokerList, config) if err != nil { log.Fatalf("无法连接到 Kafka 集群: %v", err) } defer client.Close() // 打印连接成功的日志 fmt.Println("成功建立与 Kafka 集群的连接") // 可以在这里执行其他 Kafka 相关操作 // 示例:获取 Kafka 集群的元数据信息 topics, err := client.Topics() if err != nil { log.Fatalf("获取 Kafka 集群元数据失败: %v", err) } fmt.Println("Kafka 集群中的主题:") for _, topic := range topics { fmt.Println(topic) } } ``` 在上面的代码中,我们使用 `sarama` 库创建了一个 Kafka 客户端(`Client`),并通过调用 `NewClient` 方法来建立与 Kafka 集群的连接。我们指定了 Kafka 集群的地址和端口(`brokerList`),以及一些配置参数(如 Kafka 版本、客户端 ID 等)。 成功建立连接后,我们可以执行其他 Kafka 相关操作。在示例中,我们演示了如何获取 Kafka 集群中的主题信息。 请注意,你需要先安装 `sarama` 库,你可以使用以下命令进行安装: ``` go get github.com/Shopify/sarama ``` 另外,代码中的 `brokerList` 变量需要根据你的实际情况进行修改,以匹配你的 Kafka 集群的配置。 希望这个示例能帮助你建立与 Kafka 的连接。如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值