背景
目前一些互联网公司会使用消息队列来做核心业务,因为是核心业务,所以对数据的最后一致性比较敏感,如果中间出现数据丢失,就会引来用户的投诉,年底绩效就变成325了。之前和几个朋友聊天,他们的公司都在用 kafka 来做消息队列,使用 kafka 到底会不会丢消息呢?如果丢消息了该怎么做好补偿措施呢?本文我们就一起来分析一下,并介绍如何使用 Go 操作 Kafka 可以不丢失数据。
本文操作 kafka 基于: https://github.com/Shopify/sarama
初识kafka架构
维基百科对 kafka 的介绍:
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java]流式处理库。该设计受事务日志的影响较大。
kafka的整体架构比较简单,主要由 producer 、 broker 、 consumer 组成:
截屏2021-09-12 上午10.00.13
针对架构图我们解释一个各个模块:
- Producer :数据的生产者,可以将数据发布到所选择的 topic 中。
- Consumer :数据的消费者,使用 Consumer Group 进行标识,在 topic 中的每条记录都会被分配给订阅消费组中的一个消费者实例,消费者实例可以分布在多个进程中或者多个机器上。
- Broker:消息中间件处理节点(服务器),一个节点就是一个broker,一个Kafka集群由一个或多个broker组成。
还有些概念我们也介绍一下:
- topic:可以理解为一个消息的集合,topic存储在broker中,一个topic可以有多个par

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



