kafka - 基础介绍
kafka 是什么?
kafka 最早是 linkedIn 公司的几位大佬研发的,用以解决数据传输管道相关问题,2010 年底,linkedIn 将 Kafka 捐献给了 Apache,由此不断发展。
kafka,有说是消息引擎,有说是事件处理平台,本质上都一样,用于数据传输,只不过不同的场景或者目的下,描述不一样,数据可以是消息,也可以是事件,也可以是其他的任何数据,可以统称为消息。
由于出色的性能,kafka 经常被用于大数据数据传输,为了提高竞争力,kafka 将下游系统的处理数据功能也集成进来,kafka 也正式的转变为消息传输以及流式处理的平台。
消息引擎
消息引擎,解决消息从一个地方传递到另一个地方的问题,这类产品很多,rabbitmq、activemq、rocketmiq、kakfa 等。
消息引擎提供了松耦合、异步式的传递语义。消息引擎解决的问题,是典型的生产者/消费者模式问题。这种模式下:
1、生产者和消费者职责边界明确、内聚,生产者只管生产、消费者只管消费,你不必知我我不必知你
2、消息传递过程中,生产者、消费者都只负责职责范围内的消息处理,不需对整个处理、传递过程负责
这种模式问题的解决思路也比较明确:引入 broker 来解耦生产者和消费者,broker 可以是内存中的队列,也可以是独立进程服务,即 kafka 一类的服务,可以提供功能更加丰富、完备,更加可靠的,独立专一的 broker 服务。
消息引擎基础
所谓消息引擎,消息传递,最主要的两个基础概念是消息和传递。
1、消息
什么是消息?任何数据均可以称为消息,关键在于怎么设计通用的、语义清晰的消息结构。消息一般都是采用结构化的方式,满足通用、语义清晰的条件下,便于统一处理。
对于数据承载的形式,是 json、xml、二进制,那就不一而论了,不同场景可能选择不同。
2、传递
任何传递都需要一条通路,这条通路可能有多种要素构成。对于消息引擎,主要要素:
1)基础设施
传递数据的底层基础。消息引擎一般有可靠传递的要求,所以一般采用 tcp 协议。
2)传输协议
相当于交通规则。主流的有 amqp、msmq 等协议,指导消息怎么传递。
3)传递泛型
传递的上层功能,常见的有两种:消息队列模型和发布/订阅模型。
消息队列模型一般用于点对点传递,对应一个生产者和一个消费者;发布/订阅模型一般用于一对多的传递,对应一个生产者和多个消费者。
概要设计
对于 kafka,初衷是解决大数据实时传输的问题。设计的关键点主要有以下几点。
吞吐量/延时
吞吐量是某种处理能力的最大值,对于消息引擎来说,可以理解为每秒能够处理的消息个数或者每秒能够处理了的字节数。显然,吞吐量越大,处理能力越强。
延时是发出某个操作与接收到操作响应之间的时间间隔,时间间隔越小,处理越快。
吞吐量和时延从分别从不同维度衡量一个系统的性能,两者在调优的过程通常是一堆矛盾体,这个和大家潜意识是不太相符的。
吞吐量和时延的关系受并发和服务性能(包括服务自身性能以及服务器性能)的影响,为此说明如下。
1、并发为 1 时
吞吐量和时延指标是一致的关系,未达到性能瓶颈钱,时延越低,吞吐量越高
2、多并发时
双双达到性能瓶颈时,并发越大,并行度越高,吞吐量可能越大,但并发越高,争用资源的情况会越来越严峻,可能导致单个请求的时延变低。在这种情况下,吞吐量和时延实际就是一对矛盾体,调优时需要权衡。
消息持久化
不同于其他消息引擎提供开关来权衡可靠性和性能,kafka 会将消息直接持久化。这样提供了更可靠的消息传输机制,但这一点需要强劲的性能来做背书,否则只可靠性能低,没人会用。另外,因为持久化,也能够提供更加灵活的消息处理功能,比如重新消费等。
负载均衡 &伸缩
老生常谈,这是分布式系统必须的基础的特性要求。
评论