Golang之kafka知识点

本文介绍了Golang使用sarama库连接Kafka的知识,包括消息队列的点对点和发布订阅模式,Kafka的安装、特性,以及如何创建生产者和消费者实例。通过Kafka可以实现服务解耦、流量削峰和消息通讯等功能。
摘要由CSDN通过智能技术生成

同步的函数调函数异步化;进程间的通信。高吞吐、低延迟、高容错。

1 消息队列的通信模式

1.1 点对点模式(queue)

消息生产者将消息发送到queue中,然后消息消费者从queue中取消息。一个消息被消费以后就没有了,不存在重复消费。

1.2 发布订阅模式(topic)

消息生产者发布消息到topic中,同时多个消息消费者消费该消息。与点对点模式不同,发送到topic的消息会被所有订阅者消费。(类似微信公众号推送)

1 kafka的安装

安装kafka需要依赖zookeeper的,所以安装kafka的时候也会包含zooker。

brew install kafka

Kafka是一种高吞吐量的分布式发布消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展等特点。

2 kafka 简介

  1. 消息记录:由一个key,一个value和一个时间戳构成,消息最终存储在主题下的分区中,记录在生产中称为生产者记录,在消费者中称为消费记录。Kafka集群保持了所有发布的消息,直到它们过期,无论消息是否被消费了,在一个可配置的时间段内,Kafka集群保留了所有发布的消息。比如消息的保存策略被设置为2天,那么在一个消息被发布的两天时间内,它都是可以被消费的。Kafka的性能是和数据量无关的常量级的,所以保留太多数据并不是问题。
  2. 生成者:生产者用于发布消息。
  3. 消费者:消费者用于订阅消息。
  4. offset:每个消息在被添加到分区时,都会被分配一个 offset(称之为偏移量),它是消息在此分区中的唯一编号,kafka 通过 offset 保证消息在分区内的顺序。offset 的顺序不跨分区,即 kafka 只保证在同一个分区内的消息是有序的; 对于应用层的消费来说,每次消费一个消息并且提交以后,会保存当前消费到的最近的一个 offset。
  5. 消费者组:相同的groupID的消费者将视为同一个消费者组,每个消费者都需要设置一个组id,每条消息只能被consumer group中的一个Consumer消费,但是可以被多个consumer group消费。
  6. 主题(topic):topic是存储消息的逻辑概念,不同的topic下的数据是分开存储的。不同的 topic 的消息是分开存储的, 每个 topic 可以有多个生产者向它发送消息,也可以有多 个消费者去消费其中的消息。 消息的一种逻辑分组,用于对消息分门别类,每一类消息称之为一个主题,相同主题的消息放在一个队列中。
  7. 分区(partition):一个 topic 可以划分多个分区partition(每个 Topic至少有一个分区partition),同一topic下的不同分区包含的消息是不同的。第i个分区分配在第 i mod n 个broker上。每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量),它是消息在此分区中的唯一编号,kafka通过offset 保证消息在分区内的顺序,offset的顺序不跨分区,即kafka 只保证在同一个分区内的消息是有序的。 消息的一种物理分组,一个主题被拆成多个分区,每一个分区就是一个顺序的,不可变的消息队列,并且可以持续添加,分区中的每个消息都被分配了一个唯一的id,称之为偏移量(offset),在每个分区中偏移量都是唯一的。每个分区对应一个逻辑log,有多个segment组成。
  8. 偏移量:分区中每个消息都有一个唯一的Id,称之为偏移量,代表已经消费的位置。
  9. 代理(broker):一台kafka服务器称之为一个broker。
  10. 副本(replica):副本只是一个分区(partition)的备份。副本不读取或写入数据。它们用于防止数据丢失。
  11. 领导者:leader是负责给定分区的所有读取和写入的节点。
  12. 追随者:跟随领导者指令的节点被称为Follower。
  13. zookeeper:Kafka代理是无状态的,所以它们使用Zookeeper来维护它们的集群状态。Zookeeper用于管理和协调Kafka代理。

kafka功能

  • 发布订阅:生产者生产消息(数据流),将消息发送给kafka指定的主题队列中,也可以发送到topic中的指定分区中,消费者从kafka的指定队列中获取消息,然后来处理消息。

3 sarama

Go语言中连接kafka使用第三方库:github.com/Shopify/sarama

注意:

sarama v1.20之后的版本加入了zstd压缩算法,需要用到cgo,在Windows平台编译时会提示类似如下错误:
————————————
github.com/DataDog/zstd
exec: “gcc”:executable file not found in %PATH%

所以在Windows平台请使用v1.19版本的sarama。

4 实例

4.1 生产者

import (
    "fmt"
    "github.com/Shopify/sarama"
)


func mai
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值