消息队列 随笔 4-从rabbitmq(amqp)到kafka

0. 最近感觉毛不易越来越入味了…

Kafka ApacheCN 官方报毒…
kafka 中文网 kafka研究
kafka 基础知识梳理 by cnblog-Go_小易

SpringBoot集成kafka全面实战 by CSDN-Felix-Yuan

Offset Explorer kfkUI工具

1. 准确来说是一个流平台

像MQ一样传递消息,支持消息的多订阅&多发布
像Hadoop一样处理流数据,只不过Kafka是实时的
像存储系统一样,支持批处理、备份日志以容错

2. 概述

2.1 从简单的概念开始吧

kafka支持集群在一个或多个服务器上
kafka通过topic对流数据分类
每条record包含key、value、timestamp

2.2 核心API

在这里插入图片描述

Producer API 生产者 支持app发布流数据在topic上
Consumer API 消费者 支持app订阅topic上的流数据
Stream API 流处理器 支持app消费topic中的流数据,并将处理后的流数据输出到topic上
Connector API 支持topic连接到app或db中,捕获db中的变化

2.3 补充一些官方的支持

kafka的服务器与客户端之间使用Tcp协议
支持向下兼容
官方提供多种语言的客户端

3.消息

3.1 批次

批次就是同一个主题和分区的一组消息
如果每一个消息都单独穿行于网络,会导致大量的网络开销
这要在时间延迟和吞吐量之间作出权衡

3.2 模式(schema)

统一数据解析的消息格式
许多开发者喜欢使用Apache Avro
	支持强类型和模式进化,其版本既向前兼容,也向后兼容
为同时支持新旧数据的解析,应先升级消费者,再跟发布者

4. Topics & 日志

topic,数据主题
	一个主题可以横跨多个服务器,获得更加强大的性能
	虽然日志顺序的追加在分区上,但整个主题上并不能保证顺序
kafka集群对每个topic,维护一份分区(partition)日志
	分区就像是一个队列
	队尾不断commit log记录(随时间线性的追加)
	每条记录都有唯一的offset(log的位置)
	kafka集群保留所有offset,直至"保留期限"(一个可配参数)
	保留期限内,记录允许被随时消费
	消费者可以控制offset来读取所需的数据
	分区允许kafka并行的处理数据,而不用担心会丢失记录的顺序
	需要注意的是,消费者组内的实例不能超过分区个数

请添加图片描述

5. 分布式

kafka集群共享分区日志,以容错
不同分区的kafka服务器可以互为leader、followers

5.1 broker

kafka服务器
集群中,作为一个分区的leader的broker,可以将同个分区分配给多个broker
	提供了消息冗余
	leader一旦倒了,将选举出一个新的leader(分区复制)

5.2 多集群

即多个数据中心

在这里插入图片描述

作用
	数据类型分离
	安全需求隔离
	灾难恢复
kafka的消息复制机制只能在单集群中使用
kafka自带MirrorMaker工具,可实现多集群间的消息复制

6. 生产者&消费者

在这里插入图片描述

6.1 生产者

生产者 发布到topic:分配到特定的topic、循环分配以均衡负载

特定情况下,生产者可以将消息发布到指定的分区中
	通过分区器为消息键生成一个散列值,并将其映射到指定分区 实现的	

6.2 消费者

请添加图片描述

偏移量保存在kafka、zookeeper中,重启消费者,并不会丢失偏移

在Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上,以便在任何时间,每个实例都是分区唯一的消费者

6.2.1 消费者组

所有消费者在同一消费者组中,消息记录会被自动均衡负载到每个消费者中(即每个消费者实例)

所有消费者在不同消费者组中,消息记录会被自动广播到所有消费者的进程中

如果新的实例加入组,他们将从组中其他成员处接管一些 partition 分区;如果一个实例消失,拥有的分区将被分发到剩余的实例。

7. 日志分区 及其 偏移量

重新看一遍 kafka.apachecn.org ,整理了一下 kafka 在这一块比较有意思的地方:

  • 生产者负责将记录分配到topic的哪一个 partition(分区)中。
  • 生产者分配到分区时可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。
  • 在Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上,以便在任何时间,每个实例都是分区唯一的消费者
  • 消息(分区偏移量)会被 广播 到所有 订阅 它的消费者组
  • Kafka 只保证分区内的记录是有序的,而不保证主题中不同分区的顺序。
  • 偏移量由消费者所控制:一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费
  • 对于每一个topic, Kafka集群都会维持一个分区日志
  • 每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。
  • 消费者实例可以分布在多个进程中或者多个机器上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肯尼思布赖恩埃德蒙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值