kafka基础概念[note]
生产者-消费者模型是操作系统中有过接触,kakfa基于生产者-消费者概念将其进一步扩展,成为一种分布式的消息队列,这里不讨论高性能怎么实现,也不讨论API,仅仅记录下我读官方文档的时候get到的几个点。
生产者-消费者的一个变种是订阅-发布模型,这里相比生产者-消费者模型增加了主题的概念。
就像订阅一个杂志一样。每当生产者发布一本电子杂志(消息),所有的读者都可以看到。消息是通过消息管道传送的,也叫消息队列。
这里的一个队列代表一个主题。
但这还是单机版,怎么将其变成分布式呢?
这里引入了一个称之为分区的概念,一个主题有多个分区而每个分区可以在不同的主机上。
这样实现的分布式。
这个概念引入后,整个消息传递过程中产生了一个微妙的变化,就是在消息分发这一环,
消息由生产者写入主题后会选择其中一个分区(一个消息不能同时在一个主题的多个分区)
写进去。一个分区的每个消息都有唯一的ID,但是一个主题中的每个分区ID都是自治的。举例:分区一第一条消息ID
为1
,分区二第一条消息ID
为1
,两分区属于同一主题,但消息必定不是同一个。这某种角度称之为消息写入的负载均衡。
另外,其引入了一个消费者组的概念,一个消费者组存在多个消费者。对于一个消费者组,一个消息只需要被组内其中任一消费者消费一次。而一个消息对于多个消费者组,是广播的,也就是所有订阅主题消费者组都必须收到这个消息一次。
一句话概括就是组间广播,组内负载均衡。
容灾
主题内多个消息分区由一个消费者组里的消费者瓜分,当消费者线程挂掉,它的消费的分区就会被其他消费者瓜分。
而一个主题内的每个分区,都会被复制到多个主机上。当然会有一个分区会被标记为主要,负责处理请求,包括消费者读请求和生产者写请求,而其他副本分区只负责复制主要分区(区别于主分区,不存在一个分区作为主分区的概念)
。
概念及术语
- kafka broker --------- kafka集群中的主机
- record ---------消息,一个消息包含一个键,一个值,一个时间戳
参见:
https://www.cloudkarafka.com/blog/2016-11-30-part1-kafka-for-beginners-what-is-apache-kafka.html