kafka-简单介绍及版本兼容

前言

kafka现在在很多地方都会有应用到,那kafka是什么呢?

kafka-简单介绍及版本兼容

简介

Apache Kafka是一个开源消息系统项目,该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。

0x00 历史

Apache Kafka最初由LinkedIn开发,并在2011年初开源。

在2012年10月23日由Apache Incubator(Apache Incubator(阿帕奇孵化器)是旨在成为完全成熟的Apache软件基金会项目的开源项目的通道)孵化出站,成为了Apache软件基金会的项目。

2014年11月, Jun Rao、Jay Kreps、 Neha Narkhede等几个曾在领英为Kafka工作的工程师,创建了名为Confluent的新公司,并着眼于Kafka。

根据2014年Quora(美版知乎)的帖子,Jay Kreps似乎已经将它以作家Franz Kafka(是奥匈帝国一位使用德语的小说家和短篇犹太人故事家,被评论家们认为是20世纪作家中最具影响力的一位)命名。Kreps选择将该系统以一个作家命名是因为,它是“a system optimized for writing”(一个用于优化写作的系统),而且他很喜欢Kafka的作品。

0x01 编程语言

kafka是由Scala写成,Scala 运行在Java虚拟机上,并兼容现有的Java程序,因此部署kakfa的时候,需要先部署jdk环境。kafka客户端在主流的编程语言里面都有对应的支持。

0x02 特性

Kafka有诸多的特性使得越来越流行:

1、Kafka本身支持分布式,很容易横向扩展

2、高吞吐量,高性能

3、高容错性,即使宕机

0x03 主要组件介绍

kafka-简单介绍及版本兼容

生产者(producers):将消息写入到kakfa服务端的称之为生产者。Producers将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition

代理(Broker):已发布的消息保存在一组服务节点中,每个节点称之为一个broker,所有的broker组成一个kafka集群。

消费者(customers):将消息从kakfa服务端取出使用的称之为消费者。如果所有的consumer都具有相同的group,这种情况和队列模式很像,消息将会在consumers之间负载均衡;如果所有的consumer都具有不同的group,那这就是"发布-订阅",消息将会广播给所有的消费者。

主题(topic):一个topic可以认为是一类消息。

分区(partition):每个topic可以分为多个分区,存储到集群的不同节点,同时可以设置副本的个数来达到可容错的效果。

复制备份(replication):kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有),备份的个数可以通过broker配置文件来设定。

leader处理所有的read-write请求,follower需要和leader保持同步。Follower和consumer一样,消费消息并保存在本地日志中l;eader负责跟踪所有的follower状态,如果follower"落后"太多或者失效,leader将会把它从replicas同步列表中删除。当所有的follower都将一条消息保存成功,此消息才被认为是"committed",那么此时consumer才能消费它。即使只有一个replicas实例存活,仍然可以保证消息的正常发送和接收,只要zookeeper集群存活即可。(不同于其他分布式存储,比如hbase需要"多数派"存活才行)

当leader失效时,需在followers中选取出新的leader,可能此时follower落后于leader,因此需要选择一个"up-to-date"的follower。选择follower时需要兼顾一个问题,就是新leader上所已经承载的partition leader的个数,如果一个server上有过多的partition leader,意味着此server将承受着更多的IO压力.在选举新leader,需要考虑到"负载均衡"。

kafka-简单介绍及版本兼容

0x04 版本兼容

在0.9.X版本,kafka broker兼容之前老版本的客户顿。从0.10.0.0开始,kafka broker就兼容更新版本的客户端。如果比较新的客户端连接到旧版本的broker,那么只能支持旧版本broker所支持的特性。

¥42.72
购买

相关推荐