人工智能时代前沿技术社区

首页 > 大数据 > 热点

浅谈Apache Kafka

Apache Kafka在大数据领域起着非常重要的作用。为了让大家进一步了解Apache Kafka,飞马网于11月1日晚,邀请到青云数据产品工程师彭科老师为大家分享该领域的内容。

作者: | 2018-11-07 16:32:20


1541580001279898.jpg

Apache Kafka在大数据领域起着非常重要的作用。为了让大家进一步了解Apache Kafka,飞马网于111日晚,邀请到青云数据产品工程师彭科老师为大家分享该领域的内容。

以下是这次线上直播的分享实录:

今天分享的主题是Apache Kafka,主要分为四个部分。

一.背景与应用场景

Kafka最开始是专门用来做日志这一块处理格式的一个队列,后来发现在传统的架构里都存在一个老架构的不便利,比如强耦合,后来逐渐出现一些技术,使得很多技术直接跟ESB对接,达到一个解耦的作用,kafka最大的作用也是解耦。

Kafka的特点:

1、发布订阅模式,时间复杂度为01)的方式提供消息持久化能力,TB级数据也能保持常数时间复杂度访问性能

2、支持分区,分布式消费,保证每个分区内消息有序

3、支持离线数据和在线数据处理,支持数据持久化

4、支持水平在线扩容

Kafka的应用场景:

这个在大家工作中是最关注的的事情。最主要是在两大场景,一是日志监控;一是流式计算。

1、日志监控系统

2、实时流计算

3、存储:

4、消息系统

5、网站活动跟踪

二.架构原理

总体架构:如图

元数据存储信息

关键角色

Topic&Producer

Kafka中最关键的几个角色,首先就是TopicProducer

一个topic下有一个到多个partitionpartition下有多个段文件,这种方式可以并行处理,充分利用磁盘的IO达到高性能,也是Kafka高性能的指标之一。

Partition内部是有序的。

Consumer&Consumer Group

通常写代码中很有可能会把这两个代码混淆,奇迹上就是一个多线程的概念,多线程同处于Consumer Group或者说多个进程。

早期版本中的kafka是存在主paper中的,也是说其对消费的影响是非常大的,而且早期版本中存了过多的元数据信息,在管理过程中对住paper集群的依赖是非常高的,在kafka版本不断更新的过程中,有很多元数据或者API是可以直接操作到kafkakafka实际上有很多的更新,主要是为了减少对主paper的压力,达到一个集群更加可靠的目的。Offset是存储到kafka内部的一个topic里面。另外,Tipic获取数据的管理是有自己的参数的。

高可靠存储和高性能解密

高可靠存储

它主要是依赖副本策略,在大数据领域很多都是这么做的。Kafka副本数小于等于节点数。

读写性:kafkatopic的每个partition都会有一个leader,但是在开发中并不知道是哪个leader

Follow:是定期的去的复制leader上的数据。

ISR列表:follower远远落后于leader的消息或超过一定的时间,参数可以维护,follower就会移除这个列表,达到这个数据之后又会加入这个ISR列表,这里存在一个性能的问题。如果follow一直落后和加入,操作系统也会增加一个系统的损耗,对吞吐量有一定影响。

可靠传输:采用ACK确认机制,大家在写代码(producer等)的时候可以看到这个参数。

高可靠性使用:

cap理论里面,kafka最初的设计还是为了日志和监控数据领域,实际上有三个,在队列里面都是这样的概念。

1、消息可能丢失,但不会重复

场景:我们提交了消息,此时consumer崩溃了,这个时候消息就有可能丢失,因为offset提交了,这种场景非常常见。

2、消息不会丢,但是可能重复

场景:生产者提交消息时如果网络中断,生产者可以从事很多事并且设置时间,这个时候可以发现如果网络可以恢复,数据是不会丢失的但有可能重复,因为在网络中断时offset没有提交,但是消息提交了,下次还是会从offset开始。

3、每条消息都会被传输且传输一次

官方性能

高吞吐:如图

快:原因:如图

高性能存储:格式不管是写进去还是读出来消息格式都是一致的。这种没有加太多元数据信息,对性能也是最高的利用,对于端到端的数据压缩在整个的数据传输过程中kafka内部已经做好了压缩,只需要调好参数,选择压缩状态就好。

支持多个磁盘配置:

增加了并行处理,提高了性能。

三.生态与工具

在使用和运维kafka过程中十分重要,跟其他数据源做对接的时候也是尤为重要的,可以省去很多查资料等的时间。

1kafka connect

支持单点和分布式

2、kafka stream

想当于一个未来,社区目前最重要的一个主件,重要场景是流式计算。

这个平台可以节约成本。

3kafka mirrormaker

用于集群间数据迁移,或者跨集群数据迁移方案。原理很简单,从一个集群消费数据然后生产到另一个集群,这样就将数据同步过去了,这些都是kafka的脚本已经做好了的,直接输入个猴子那个参数,直接加白名单或者黑名单。

Kafak的监控管理方案

推荐几个:

1、Kafka managerGitHub上星数最高。原理是把kafka的配置信息存储到主paper中去。使用jmx监控指标,可以监控到具体到topic消息的堆积,partition内部的数量,同时也可以管理多个kafka集群。

2、Kafka offset monitorUI比较酷,无法管理集群,里面是小型数据库,堆积到一定量会比较卡,需要清除数据。

3、kafka monitor

linkedin开发,隔一段时间有代码提交,不用担心没有人维护,主要的好处是做端到端的整体测试方便,西欧阿西的延迟和丢失率都可以在界面上看到。

Kafka性能的优化

如图

MQ对比

对技术的考察度比较高。做大数据会经常遇到选型的问题。

如图。

四.实际项目案例

1、日志平台

希望日志可以实时查询,用来做运维、监控等。

这一套架构主要介绍kafka的作用:缓冲和削峰,现在还可以限流;跟业务数据结合来分析故障;持久化数据,备份历史数据。

2、物联网数据

以上就是本次线上直播的主要内容,相信你对kafka技术有了一定的认识。想了解更多更详细内容的小伙伴们,可以关注服务号:FMI飞马网,点击菜单栏飞马直播,即可进行学习。  

微信图片_20180530151141.jpg