初识Kafka

Kafka是一个开源流处理平台,由Scala和Java编写。Kafka是一个高吞吐量的分布式发布订阅消息系统。可以用来收集用户在网站中的动作流数据,以及物联网中的信息采集。

Kafka与MQ的使用场景

Kafka平台提供了消息的订阅与发布的消息队列,可用于系统间的解耦,异步通信,削峰填谷等场景。

比如用户注册的场景,在传统业务中,一般为用户注册请求到服务端,服务端将用户信息写入到数据库中,并且调用短信发送一个注册成功的短信,整个流程完成。我们发现,实际上用户的注册和发送短信可以异步完成。所以可以引入消息队列,用户注册时,将用户信息写入到数据库后,并不直接调动短信服务,而是将注册成功的消息发送到消息队列中,然后将注册成功返回给用户,发送短信的服务不停从消息队列中取出注册成功消息并进行消费,将通知发送给用户。这样用户注册和发送注册成功短信进行了隔离,不仅提高了用户注册的速度,并且当发送短信服务产生故障时,并不影响用户注册,实现了故障的隔离。并且消息队列可以在流量突然爆发时,进行缓冲,减少队数据库和业务服务突然的流量冲击。

Kafka提供了Kafka streaming插件,实现了实时在线流处理。相比较其他消息队列框架,Kafka streaming运行在应用端,部署方便,使用简单。

消息队列的常见工作模式有两种,一种是至多一次,即一个消息在被确认消费后,消息服务器会在队列中主动删除数据,这消费方式一般只有一个消费者,消息队列中的消息不允许重复消费。另外一种则没有限制,一个消息可以被多个消费者同时消费,并且一个消息可以被同一个消费者多次消费。Kafka属于可以多次同时消费的类型。

Kafka的基本架构

Kafka以一种集群的形式存在,其中的消息(Record)被Topic分类,每一个Record只属于一个Topic。每个Topic底层都有一组分区的日志用来持久化其中的Record,其中每个日志分区都有一个Broker来担当这个分区的leader,其他broker为follower,相当于该分区有多个副本,其中leader负责分区数据的读写,follower负责同步这个分区的数据,如果leader服务宕机,其他follower会选举出新的leader继续负责这个分区的读写操作。集群中leader的监控和Topic的部分元数据存储在zookeeper中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注