成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 語言中 kafka 客戶端庫 Sarama

開發 前端 Kafka
Apache Kafka 是一款開源的消息引擎系統。它在項目中的作用主要是削峰填谷和解耦。本文我們只介紹 Apache Kafka 的 Golang 客戶端庫 Sarama。Sarama 是 MIT 許可的 Apache Kafka 0.8 及更高版本的 Golang 客戶端庫。

01、介紹

Apache Kafka 是一款開源的消息引擎系統。它在項目中的作用主要是削峰填谷和解耦。本文我們只介紹 Apache Kafka 的 Golang 客戶端庫 Sarama。Sarama 是 MIT 許可的 Apache Kafka 0.8 及更高版本的 Golang 客戶端庫。

如果讀者朋友對 Apache Kafka 服務端還不了解,建議先閱讀官方文檔中的入門部分,本文使用的版本是 Apache Kafka 2.8。

[[397879]]

02、生產者

我們可以使用 Sarama 庫的 AsyncProducer 或 SyncProducer 生產消息。在大多數情況下首選使用 AsyncProducer 生產消息。它通過一個 channel 接收消息,并在后臺盡可能高效的異步生產消息。

SyncProducer 發送 Kafka 消息后阻塞,直到接收到 ACK 確認。SyncProducer 有兩個警告:它通常效率較低,并且實際的耐用性保證取決于 Producer.RequiredAcks 的配置值。在某些配置中,有時仍會丟失由 SyncProducer 確認的消息,但是使用比較簡單。

為了讀者朋友們容易理解,本文我們介紹 SyncProducer 作為生產者的使用方式。如果讀者朋友想了解 AsyncProducer 作為生產者的使用方式,請參考官方文檔。

使用 SyncProducer 作為生產者的示例代碼:

  1. func sendMessage (brokerAddr []string, config *sarama.Config, topic string, value sarama.Encoder) { 
  2.  producer, err := sarama.NewSyncProducer(brokerAddr, config) 
  3.  if err != nil { 
  4.   fmt.Println(err) 
  5.   return 
  6.  } 
  7.  defer func() { 
  8.   if err = producer.Close(); err != nil { 
  9.    fmt.Println(err) 
  10.    return 
  11.   } 
  12.  }() 
  13.  msg := &sarama.ProducerMessage{ 
  14.   Topic: topic, 
  15.   Value: value, 
  16.  } 
  17.  partition, offset, err := producer.SendMessage(msg) 
  18.  if err != nil { 
  19.   fmt.Println(err) 
  20.   return 
  21.  } 
  22.  fmt.Printf("partition:%d offset:%d\n", partition, offset) 

閱讀上面這段代碼,我們調用 NewSyncProducer() 創建一個新的 SyncProducer,給定 broker 地址和配置信息。調用 SendMessage() 生產給定的消息,并且僅在生產成功或失敗時返回。它將返回分區(Partition)和生產的消息的偏移量(Offset),如果消息生產失敗,則返回錯誤。

需要注意的是,為了避免泄露,必須在生產者上調用 Close(),因為當它超出范圍時,可能不會自動垃圾回收。

03、消費者

我們可以使用 Sarama 庫的消費者 Consumer 或消費者組 ConsumerGroup API 消費消息。為了讀者朋友們容易理解,本文我們介紹使用 Consumer 消費消息。

Consumer 管理 PartitionConsumers,該 PartitionConsumers 處理來自 brokers 的 Kafka 消息。

Consumer 消費消息的示例代碼:

  1. func consumer (brokenAddr []string, topic string, partition int32, offset int64) { 
  2.  consumer, err := sarama.NewConsumer(brokenAddr, nil) 
  3.  if err != nil { 
  4.   fmt.Println(err) 
  5.   return 
  6.  } 
  7.  defer func() { 
  8.   if err = consumer.Close(); err != nil { 
  9.    fmt.Println(err) 
  10.    return 
  11.   } 
  12.  }() 
  13.  partitionConsumer, err := consumer.ConsumePartition(topic, partition, offset) 
  14.  if err != nil { 
  15.   fmt.Println(err) 
  16.   return 
  17.  } 
  18.  defer func() { 
  19.   if err = partitionConsumer.Close(); err != nil { 
  20.    fmt.Println(err) 
  21.    return 
  22.   } 
  23.  }() 
  24.  for msg := range partitionConsumer.Messages() { 
  25.   fmt.Printf("partition:%d offset:%d key:%s val:%s\n", msg.Partition, msg.Offset, msg.Key, msg.Value) 
  26.  } 

閱讀上面這段代碼,我們調用 NewConsumer() 創建一個新的 consumer,給定 broker 地址和配置信息。調用 ConsumePartition() 創建 PartitionConsumer,給定 topic、partition 和 offset。PartitionConsumer 處理來自給定 topic 和 partition 的 Kafka 消息。

需要注意的是,為了防止泄露,必須調用 consumer 和 partitionConsumer 的 Close(),因為當它超出范圍時,可能不會自動垃圾回收。

04、總結

本文主要介紹如何使用 Apache Kafka 的 Golang 語言客戶端庫 Sarama 生產和消費 Kafka 消息。關于生產者和消費者,分別列舉了一個簡單示例。除此之外,Sarama 庫還提供了很多其它 Api,感興趣的讀者朋友可以閱讀官方文檔了解更多。

責任編輯:未麗燕 來源: Golang語言開發棧
相關推薦

2021-10-18 05:00:38

語言GoRequestHTTP

2014-08-11 16:35:35

KafkaJava客戶端

2024-02-05 08:50:57

Golang標準庫客戶端

2022-02-20 23:15:46

gRPCGolang語言

2021-08-01 23:18:21

Redis Golang命令

2021-10-26 09:26:21

編程技能開發

2011-08-17 10:10:59

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2022-09-23 08:02:42

Kafka消息緩存

2011-10-26 13:17:05

2011-03-24 13:00:31

配置nagios客戶端

2011-03-02 14:36:24

Filezilla客戶端

2010-12-21 11:03:15

獲取客戶端證書

2010-05-31 10:11:32

瘦客戶端

2020-03-19 08:00:00

客戶端KubernetesAPI

2021-06-07 23:19:44

Golang語言 Defer

2021-04-28 09:02:48

Golang語言Context

2011-03-21 14:53:36

Nagios監控Linux

2011-04-06 14:24:20

Nagios監控Linux

2013-05-09 09:33:59

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩专区 | 精品国产18久久久久久二百 | 久久大香 | 国产精品毛片 | 欧美精品黄 | 日韩精品在线免费观看视频 | 亚洲91 | 精久久久| 日韩国产中文字幕 | 黄色在线免费观看 | 亚洲精品久久久久久一区二区 | www一级片 | 国产三级一区二区 | 在线国产小视频 | a黄视频 | 欧美一级二级在线观看 | 亚洲精品片 | 国产精品视频一二三 | 亚洲一区二区三区在线观看免费 | 亚洲精选一区二区 | 黄片毛片| 亚洲精品日日夜夜 | 欧美三区在线观看 | 欧美男人天堂 | 国产精品美女www爽爽爽视频 | www.国产一区| 色在线免费视频 | 国产99小视频 | 日本一本视频 | 久久99蜜桃综合影院免费观看 | 久草视频在 | 色吧色综合 | 国产日韩欧美一区 | 伦理片97| 国产综合第一页 | 亚洲狠狠| 国产一区二区久久 | 久草视频网站 | 男女羞羞免费视频 | 中文字幕加勒比 | 久久久久久一区 |