kafka的定义 java
kafka是一个分布式消息系统,有linkedin时候用scale编写,用做LinkedIn的活动流(Acitvity Stream)和运营数据处理管道(pipeline)的基础,具备高水平扩展和高吞吐量。从 0.9 版本开始,Kafka 的标语已经从“一个高吞吐量,分布式的消息系统”改成”一个分布式流平台”。c++
应用领域web


kafka已经被多家不一样类型的公司做为多种类型的数据管道和消息系统使用。如:淘宝,支付宝,百度,twitter等ruby
目前愈来愈多的开源分布式处理系统如:服务器
用于日志收集的Apache Flume系统微信
用于实时处理的Apahce Storm系统架构
用于内存处理的Spark系统app
用于全文检索的Elasticsearch系统负载均衡


分布式消息队列的对比 分布式
ActiveMQ | RabbitMQ | kafka | |
---|---|---|---|
所属社区/公司 | Apache | Mozilla Public License | Apache/Linkedin |
开发语言 | java | erlang | scala |
支持的协议 | openwire/stomp/rest/xmpp/amqp |
amqp | 仿amqp(独立研发) |
事务 | 支持 | 不支持 | 不支持 |
集群 | 支持 | 支持 | 支持 |
负载均衡 | 支持 | 支持 | 支持 |
动态扩容 | 不支持 | 不支持 | 支持(zookeeper) |
AMQP协议
消费者 consumer:从消息队里中请求消息的客户端应用程序
生产者 producer: 向broker发布消息的客户端应用程序
AMQP服务器端 broker:用来接收生产者发送的消息并将这些消息路由个服务器中的队里,说的简单点就是处理生产者的消息转发到消费者能收到的路由里面,一个kafka节点就是一个broker节点,一个或者多个broker节点就能组成一个kafka集群。
consumer group: 每一个consumer属于特定的一个consumer group,一条消息能够发到多个consumer group中被consumer消费,可是一个consumer group中只能有一个consumer消费该消息。
在一套 Kafka 架构中有多个 Producer,多个 Broker,多个 Consumer,每一个 Producer 能够对应多个 Topic,每一个 Consumer 只能对应一个 Consumer Group。
整个 Kafka 架构对应一个 ZK 集群,经过 ZK 管理集群配置,选举 Leader,以及在 Consumer Group 发生变化时进行 Rebalance。
kafka支持的客户端语言
c,c++,erlang,Java,.net,Perl,PHP,Python,ruby,go,JavaScript。
kafka的架构

首先了解一些概念:
主题 topic: 一个主题相似新闻中的体育,娱乐,教育等分类概念,在实际工程中一般一个业务一个主题;
分区 partition : 一个topic中的消息数据按照多个分区组织,分区是kafka消息队组织的最小单位,一个分区能够看作是一个FIFO的队列;每一个分区的内部是有序的。通常集群的性能低下,咱们能够经过增长分区的配置提升性能。

理解kafka消息在分区之间序列
Kafka 为每一个主题维护了分布式的分区(Partition)日志文件,每一个 Partition 在 Kafka 存储层面是 Append Log。任何发布到此 Partition 的消息都会被追加到 Log 文件的尾部,在分区中的每条消息都会按照时间顺序分配到一个单调递增的顺序编号,也就是咱们的 Offset。Offset 是一个 Long 型的数字。
咱们经过这个 Offset 能够肯定一条在该 Partition 下的惟一消息。在 Partition 下面是保证了有序性,可是在 Topic 下面没有保证有序性。






本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。