[Kafka]:00 - 初步认识:成长故事、特性、使用场景、架构

0、名字-kafka

在这里插入图片描述
看到这本书《KAFKA The Metamorphosis》(译名:变形记),作者:Franz Kafka。豆瓣评分8.4分,3万多评价,与Apache kafka重名并不是巧合。

Apache kafka开发者Jay Kreps提供了他的见解:由于Kafka是一个针对写作优化的系统,使用作者的名字是有道理的。 我在大学里学过很多课程,并且喜欢弗兰兹·卡夫卡。 此外,对于一个开源项目来说这个名字听起来很酷。

这就是其 名字的渊缘。

1、kafka成长故事

LinkedIn的开发团队主要由软件工程师/架构师Jay Kreps领导,他之前负责分布式键值存储系统Voldemort的开发和开源发布。最初的团队还包括Neha Narkhede和后来的Jun Rao。他们共同创建了一个消息系统,可以满足监控和跟踪系统的需求,并可以扩展到未来。主要目标是:

  • 使用推拉模型将生产者和消费者分离
  • 为消息传递系统中的消息数据提供持久性,以允许多个消费者
  • 优化消息的高吞吐量
  • 允许系统的水平扩展随着数据流的增长而增长

最终一个发布/订阅消息传递系统诞生了,它具有典型的消息传递系统接口,但存储层更像是一个日志聚合系统。结合使用Apache Avro进行消息序列化,Kafka可以有效地处理每天数十亿条消息的指标和用户活动跟踪。 Kafka的可扩展性帮助LinkedIn的使用量增长了超过1万亿条消息(截至2015年8月),每天消耗的数据超过1 PB。

  • 2010年底,Kafka在GitHub上作为开源项目发布,初始版本是0.7.0。
  • 随着它开始在开源社区引起关注,2011年7月被提议并被接受为Apache Software Foundation孵化器项目。
  • 2012年10月,Apache Kafka从孵化器项目毕业。

从那时起,它一直在努力,并在LinkedIn之外找到了一个强大的贡献者和提交者社区。 Kafka现在用于世界上一些最大的数据管道。

  • 2014年秋天,Jay Kreps、Neha Narkhede、Jun Rao离开LinkedIn,成立Confluent,一家以给Apache Kafka提供开发、企业支持和培训为中心的公司。
  • 2017年11月1日,发布1.0.0版本
  • 2018年7月30日,发布2.0.0版本
  • 2019年3月22日,发布2.2.0版本。这是迄今(20190527)最新版本。

kafka各版本下载

kafka源码是scala编写的,支持scala、python、java、php、c++等语言。

LinkedIn、Confluent、开源社区等持续贡献、开发、维护Kafka,使其成为大数据流水线的首选。

2、在Hadoop生态中的Kafka

在这里插入图片描述
Kafka属于Apache的一个开源流处理平台,是一种高性能的跨语言的分布式发布/订阅消息系统(这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因。也可以认为是消息中间件)。有如下特点(特性):

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;
  • 可扩展性:kafka集群支持热扩展;
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);
  • 高并发:支持数千个客户端同时读写;
  • 支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;

Kafka使用场景:

  • 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;
  • 消息系统:解耦和生产者和消费者、缓存消息等;
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;
  • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
  • 流式处理:比如spark streaming和storm;
  • 等等;

3、Kafka架构图

在这里插入图片描述
一个典型的Kafka集群中包含:

  • 若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等)。Producer,是日志消息生产者,用来写数据。这里的【日志】不要误读了,不是日常编程中的log(如报错、警告、提示性错误等标记信息,追踪问题的标签/记录),在此它应该是message(kafka的基本数据单位)
  • 若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高)。每一台机器叫一个Broker(Kafka Server)。
  • 若干Consumer Group,以及一个Zookeeper集群。Consumer,是消息的消费者,用来读数据。

还有几个常见名词:

  • Topic,不同消费者去指定的Topic中读,不同的生产者往不同的Topic中写。它是一个逻辑概念。
  • Partition,在Topic基础上做了进一步区分分层(也就是说:一个Topic是由一个或多个Partition实现的)。Topic的物理实现(以文件夹的形式存在)。Partition内部还有segment。

Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance(这是负载均衡的思想,如出现个别节点不稳定,就体现了rebalance机制)。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息

kafka官网
Github-Apache kafka

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值