Contents

中间件-Kafka

官方文档

CSDN luslin1711

CSDN 乾坤鸟 Docker安装Kafka教程(超详细)

简介

Kafka 结合了三个关键功能

  1. 发布(写入)和订阅(读取)事件流。
  2. 持久可靠地存储事件 流。
  3. 在事件发生时或回顾性 地处理事件流。

Kafka 是一个分布式系统,由通过高性能TCP 网络协议进行通信的服务器和客户端组成。可以部署在本地和云环境中的裸机硬件、虚拟机和容器上。

服务器(Broker):Kafka 作为一个或多个服务器集群运行,可以跨越多个数据中心或云区域。

客户端:它们允许您编写分布式应用程序和微服务,即使在出现网络问题或机器故障的情况下,也能以容错的方式并行、大规模地读取、写入和处理事件流。

主要概念和术语

事件记录了世界上或您的企业中“发生了某事” 的事实。事件具有键、值、时间戳和可选的元数据标头。比如:

活动键:“爱丽丝” 事件值:“向 Bob 支付了 200 美元” 事件时间戳:“2020 年 6 月 25 日下午 2:06”

生产者是那些向 Kafka 发布(写入)事件的客户端应用程序,而消费者是那些订阅(读取和处理)这些事件的客户端应用程序。

事件被组织并持久存储在主题中。主题类似于文件系统中的文件夹,事件是该文件夹中的文件。

Kafka 中的主题始终是多生产者和多订阅者。

事件在消费后不会被删除。可以配置每个主题保留事件时间,之后旧事件将被丢弃。

主题是分区的,这意味着一个主题分布在位于不同 Kafka 代理上的多个“桶”中。

当一个新事件被发布到一个主题时,它实际上被附加到主题的分区之一。

具有相同事件键(例如,客户或车辆 ID)的事件将写入同一分区,并且 Kafka保证给定主题分区的任何消费者将始终以与写入事件完全相同的顺序读取该分区的事件。

为了使您的数据具有容错性和高可用性,每个主题都可以被复制,甚至可以跨地理区域或数据中心,以便始终有多个代理拥有数据副本。一个常见的生产设置是复制因子 3,即你的数据总是有三个副本。这种复制是在主题分区级别执行的。

Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

Partition

Partition是物理上的概念,每个Topic包含一个或多个Partition.

Producer

负责发布消息到Kafka broker

Consumer

消息消费者,向Kafka broker读取消息的客户端。

Consumer Group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

docker安装

乾坤鸟博客

传递的消息是什么

就是一个字符串,一般是序列化的json对象,比如go-zero的kq就是通过方法Push传送对象的

serviceContext.go

1
2
3
4
type ServiceContext struct {
	...
	KqueuePaymentUpdatePayStatusClient *kq.Pusher
}

updateTradeStateLogic.go

1
2
3
4
func (l *UpdateTradeStateLogic) pubKqPaySuccess(orderSn string,payStatus int64) error{
  ...
	return  l.svcCtx.KqueuePaymentUpdatePayStatusClient.Push(string(body))
}

kafka高性能的原因

  • 批量发送:Kafka 通过在网络和磁盘 I/O 上批量处理消息来提高吞吐量,这降低了网络传输和磁盘存储的开销。
  • 零拷贝:Kafka 使用 Linux 的零拷贝(Zero-copy)特性,使数据在从生产者到 broker 到消费者的传输过程中无需通过内核空间到用户空间再到内核空间的复制操作,大大提高了数据传输的性能。
  • 持久性和性能:Kafka 将所有消息存储在磁盘上,这使得 Kafka 可以存储大量的消息,并允许消费者按需读取,而不是立即将它们删除。此外,Kafka 使用了顺序磁盘 I/O,这使得磁盘读写操作更快。
  • 分布式系统:Kafka 集群中的主题被划分为多个分区,每个分区可以在多个服务器上进行复制以提供容错能力。这种分布式架构允许 Kafka 在多个服务器上水平扩展,提高性能。
  • 消费者偏移:Kafka 让消费者跟踪自己已经读到哪个位置,而不是在服务器端跟踪哪些消息已经被送达。这使得消费者可以有更大的灵活性,比如可以重新处理过去的消息。

kafka offset是如何动的

按客户端发送的ack来动的,确定消息被消费了之后移动offset

 |