golang整合kafka

kafka 基本概念

  • 消息队列

1、什么是消息队列

消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。

2、消息队列的应用场景

应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;

异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;

限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;

消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;

3、消息队列的两种模式

消息队列包括两种模式,点对点模式(point to point, queue)和发布/订阅模式(publish/subscribe,topic)

点对点:点对点模式下包括三个角色:消息队列、生产者、消费者

消息发送者生产消息发送到queue中,然后消息接收者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

3.1、点对点模式特点:

每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中);

发送者和接发收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;

接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

3.2、发布订阅模式

每个消息可以有多个订阅者;

发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。

为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

  • kafka是什么?

Kafka 是一个分布式,分区的,多副本的,多订阅者的消息发布订阅系统,由 LinkedIn 公司开发。以下是 Kafka 的一些相关知识:

1、优点

可靠性强(分布式-分区-副本)、扩展性强(可伸缩)、性能高(数据读写)、耐用性强(数据持久化)、时效性强。

2、缺点

由于是批量发送,数据并非真正的实时; 仅支持统一分区内消息有序,无法实现全局消息有序; 有可能消息重复消费; 依赖zookeeper进行元数据管理。

kafka重要概念

  • Topic:Kafka 中的消息被组织成主题(topic),生产者将消息发布到特定的主题,消费者从感兴趣的主题订阅消息。

  • Partition:每个主题(topic)可以被分成多个分区(partition),每个分区是一个有序的消息队列,生产者将消息发送到某个特定的分区,每个分区可以分布在不同的服务器上以实现负载均衡、容错等目的。

  • Broker:Kafka 集群中的每个节点称为 broker,每个 broker 可以承载多个分区(partition),每个分区(partition)可能被分配到不同的 broker 上。

  • Producer:消息的生产者,可以将消息发布到特定主题(topic)的某个分区(partition)。

  • Consumer:消息的消费者,可以从某个主题(topic)的某个分区(partition)订阅消息。

  • Consumer Group:若干个消费者可以组成一个消费者组(consumer group),共同消费某个主题(topic)的所有消息。每个分区(partition)只能由同一个 consumer group 中的一个消费者消费。

  • Offset:Kafka 中的每条消息都有一个唯一的偏移量(offset),代表该消息在分区(partition)中的位置。每个消费者都有自己的 offset 计数器,可以指定从哪个 offset 开始读取消息。

  • Replication:Kafka 支持数据备份和容错机制,每个分区(partition)可以有多个副本(replica),这些副本分布在不同的 broker 上,以保证某一个 broker 宕机时数据不会丢失。

副本

在kafka 中, 副本和正本都被称之为副本,但存在leader 和follower之分,活跃的称之为leader,其它的为follower, topic、partition、replica的关系:消息进来的时候首先存入leader replica,然后从leader replica中复制到其它的follower replica, 只有当复制全部完成的时候,consumer才可以消费此条消息,这样的措施的目的是为了意外发生的时候,数据可以恢复,consumer的消费也是从leader replica中获取的。

概念要点补充

  1. 一个partition只能被同组的一个consumer消费
  2. 同一个组里的一个consumer可以消费多个partition
  3. 消费效率最高的情况是partition和consumer 的数量相同,这样可以确保每个consumer可以专职负责一个partition
  4. consumerd的数量不能多余partition的数量,当consumer的数量大于partition时,就会有consumer闲置
  5. consumer可以认为是一个订阅者的集群,其中的每个consumer负责自己所消费的分区

参考资料

1、https://www.cnblogs.com/itlz/p/15470456.html

相关推荐
qq_5470261793 小时前
Kafka 常见问题
kafka
core5123 小时前
flink sink kafka
flink·kafka·sink
飞来又飞去5 小时前
kafka sasl和acl之间的关系
分布式·kafka
张伯毅10 小时前
Flink SQL 支持 kafka 开启 kerberos 权限控制.
sql·flink·kafka
darkdragonking13 小时前
OpenEuler 22.03 不依赖zookeeper安装 kafka 3.3.2集群
kafka
saynaihe1 天前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka
隔着天花板看星星1 天前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
太阳伞下的阿呆2 天前
kafka常用命令(持续更新)
分布式·kafka
BUTCHER52 天前
Kafka安装篇
分布式·kafka
若雨叶2 天前
Kafka实现监听多个topic
分布式·kafka