最新消息:

Apache Kafka专题一、Kafka概念和原理

IT技术 ipcpu 883浏览

Apache Kafka专题一.md

一、Apache Kafka是什么?

Kafka的基本介绍

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

二、Kafka同其他的MQ有何不同?

消息队列(MQ)主要有以下几个场景:异步处理、应用解耦、系统间通讯、消息队列驱动型架构、错峰与流控、日志收集、广播等待。

开源的消息队列有很多如rabbitmq,kafka,rocketmq,activemq,ZeroMQ …,针对不同的业务场景、使用不同的编程语言,可能有不同的选择。

值得注意的是不同的MQ软件对应用层协议的支持都不一样,例如RabbitMQ最早开发就是为了支持AMQP协议,ActiveMQ对Java的JMS规范支持较好。

Kafka使用的自己的私有协议,因此使用起来要格外注意。

三、Kafka架构组件

Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。

topic:消息存放的目录即主题
Producer:生产消息到topic的一方
Consumer:订阅topic消费消息的一方
Broker:Kafka的服务实例就是一个broker

四、Kafka的存储机制

Kafka对于接收的消息是存储到硬盘上的,可以设置消息存储的时间和大小,超出限制后会自动删除。

即使消费者已经消费了消息,也不会删除,因此消费者会使用offset来记录上次读取的位置。

Kafka可以将主题(topic)划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中,只要如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡和水平扩展。

partition

同一个topic下有多个不同的partition,每个partition为一个目录,partition命名的规则是topic的名称加上一个序号,序号从0开始。

segment

每一个partition目录下的文件被平均切割成大小相等(默认一个文件是1024兆,可以手动去设置)的数据文件,每一个数据文件都被称为一个段(segment file),但每个段消息数量不一定相等。默认保留7天的数据。

segment的这种特性能够使得老的segment可以被快速清除。(类似于logrotate)

五、Kafka HA高可用

Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务。若该Broker永远不能再恢复,亦或磁盘故障,则其上数据将丢失。这与Kafka数据持久性及Delivery Guarantee的设计目标相悖。

自0.8版本开始提供了Data Replication和Leader Election机制。

Kafka中的Replication功能是为了给每个partition提供备份,当某个Broker挂掉时可以迅速实现故障切换(failover)。我们可以在创建或修改topic时指定replica factor,来设定备份数目。(默认是1,即没有Replication功能)

Leader Election是为了在Replication中选出Leader来读写数据,其他的被称作Follower副本只负责从Leader拉取数据。

六、如何实现高性能存储数据

Kafka没有像redis等程序将数据存储在内存中,但却也实现了较高的吞吐,主要得益于采用了以下技术:

批量处理,顺序写磁盘
充分利用内存的PageCache
使用zero-copy(sendfile)

七、参考资料

http://blog.csdn.net/yinwenjie/article/details/50698695
http://zqhxuyuan.github.io/2016/01/14/2016-01-14-Kafka-ISR/
https://www.cnblogs.com/jun1019/p/6256514.html
https://www.quora.com/Kafka-writes-every-message-to-broker-disk-Still-performance-wise-it-is-better-than-some-of-the-in-memory-message-storing-message-queues-Why-is-that

转载请注明:IPCPU-网络之路 » Apache Kafka专题一、Kafka概念和原理