浅谈分布式消息技术浅谈分布式消息技术Kafka
Kafka的基本介绍
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也
可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并
成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
1.以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
2.高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
3.支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
4.同时支持离线数据处理和实时数据处理。
Kafka的设计原理分析
一个典型的kafka集群中包含若干producer,若干broker,若干consumer,以及一个Zookeeper集群。Kafka通过Zookeeper管
理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到
broker,consumer使用pull模式从broker订阅并消费消息。
Kafka专用术语:
1.Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
2.Topic:一类消息,Kafka集群能够同时负责多个topic的分发。
3.Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
4.Segment:partition物理上由多个segment组成。
5.offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都
有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
6.Producer:负责发布消息到Kafka broker。
7.Consumer:消息消费者,向Kafka broker读取消息的客户端。
8.Consumer Group:每个Consumer属于一个特定的Consumer Group。
Kafka数据传输的事务特点
at most once:最多一次,这个和JMS中"非持久化"消息类似,发送一次,无论成败,将不会重发。消费者fetch消息,然后保
存offset,然后处理消息;当client保存offset之后,但是在消息处理过程中出现了异常,导致部分消息未能继续处理。那么此
后"未处理"的消息将不能被fetch到,这就是"at most once"。