golang kafka client 消费者代码

启动kafka

[root@localhost kafka_2.12-2.5.1] # [kube:] cat start_zk.sh 
./bin/zookeeper-server-start.sh config/zookeeper.properties > /dev/null &
[root@localhost kafka_2.12-2.5.1] # [kube:] cat start_kafka.sh 
./bin/kafka-server-start.sh config/server.properties > /dev/null &

[root@localhost kafka_2.12-2.5.1] # [kube:] netstat -lntup| grep java
tcp6       0      0 :::9092                 :::*                    LISTEN      8458/java           
tcp6       0      0 :::54948                :::*                    LISTEN      8104/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      8104/java           
tcp6       0      0 :::60903                :::*                    LISTEN      8458/java

创建 topic

创建主题
bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 3 --topic test

查看主题信息
bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic test

生产者生产消息
bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test

package main

import (
	"context"
	"fmt"

	"github.com/Shopify/sarama"
)

func main() {
	config := sarama.NewConfig()
	config.Version = sarama.V2_0_0_0 // kafka消费者组最低版本 V0_10_2_0

	config.Consumer.Offsets.Initial = sarama.OffsetNewest
	config.Consumer.Offsets.AutoCommit.Enable = false // 关闭自动提交
	config.Consumer.Return.Errors = true
	// config.Consumer.Group.Rebalance.Strategy = &balanceStrategy{}  支持自定义消费者重平衡策略

	group, err := sarama.NewConsumerGroup([]string{"localhost:9092"}, "g1", config)
	if err != nil {
		panic(err)
	}
	defer func() { _ = group.Close() }()

	// Track errors
	go func() {
		for err := range group.Errors() {
			fmt.Println("ERROR", err)
		}
	}()

	// Iterate over consumer sessions.
	ctx := context.Background()
	for {
		// `Consume` should be called inside an infinite loop, when a
		// server-side rebalance happens, the consumer session will need to be
		// recreated to get the new claims
		err := group.Consume(ctx, []string{"test"}, &exampleConsumerGroupHandler{})
		if err != nil {
			panic(err)
		}
	}
}

type exampleConsumerGroupHandler struct{}

func (exampleConsumerGroupHandler) Setup(se sarama.ConsumerGroupSession) error {
	fmt.Printf("Setup %q %+v\n", se.MemberID(), se.Claims())
	return nil
}
func (exampleConsumerGroupHandler) Cleanup(se sarama.ConsumerGroupSession) error {
	fmt.Printf("Cleanup %q %+v\n", se.MemberID(), se.Claims())
	return nil
}
func (h exampleConsumerGroupHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
	for msg := range claim.Messages() {
		fmt.Printf("ConsumeClaim Message topic:%q partition:%d offset:%d ts:%s val:%s\n",
			msg.Topic, msg.Partition, msg.Offset, msg.Timestamp, msg.Value)

		sess.MarkMessage(msg, "")
		sess.Commit()
	}
	return nil
}

查看消费者组的消费情况
CURRENT-OFFSET:当前消费位移
LOG-END-OFFSET:最新可消费位移
LAG:消息堆积数量
LAG越大,堆积数越多

[root@localhost kafka_2.12-2.5.1] # [kube:] bin/kafka-consumer-groups.sh --describe --bootstrap-server 127.0.0.1:9092 --group g1 

GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                 HOST             CLIENT-ID
g1              test            0          10              10              0               sarama-888ca2a0-05e9-43dd-a99a-6a02c8b10c00 /0:0:0:0:0:0:0:1 sarama
g1              test            1          15              15              0               sarama-888ca2a0-05e9-43dd-a99a-6a02c8b10c00 /0:0:0:0:0:0:0:1 sarama
g1              test            2          18              18              0               sarama-28558d3b-0c75-4b0d-a473-ced5e1b51fb3 /0:0:0:0:0:0:0:1 sarama
[root@localhost kafka_2.12-2.5.1] # [kube:] 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值