Kafka是什么,主要应用在什么场景?

一、kafka是什么?

Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被普遍使用。面试

二、产生背景

Kafka是一个消息系统,用做LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。活动流数据是几乎全部站点在对其网站使用状况作报表时都要用到的数据中最常规的部分。服务器

活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索状况等内容。这种数据一般的处理方式是先把各类活动以日志的形式写入某种文件,而后周期性地对这些文件进行统计分析。架构

运营数据指的3是服务器的性能数据(CPU、IO使用率、请求时间、服务日志等等数据)。运营数据的统计方法种类繁多。app

三、基本架构图

四、基本概念解释

Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker。broker端不维护数据的消费状态,提高了性能。直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减小耗性能的建立对象和垃圾回收。异步

Producer

负责发布消息到Kafka broke分布式

Consumer

消息消费者,向Kafka broker读取消息的客户端,consumer从broker拉取(pull)数据并进行处理。工具

Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不一样Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic便可生产或消费数据而没必要关心数据存于何处)oop

Partition

Parition是物理上的概念,每一个Topic包含一个或多个Partition.性能

Consumer Group

每一个Consumer属于一个特定的Consumer Group(可为每一个Consumer指定group name,若不指定group name则属于默认的group)网站

Topic & Partition

Topic在逻辑上能够被认为是一个queue,每条消费都必须指定它的Topic,能够简单理解为必须指明把这条消息放进哪一个queue里。为了使得Kafka的吞吐率能够线性提升,物理上把Topic分红一个或多个Partition,每一个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的全部消息和索引文件。

若建立topic1和topic2两个topic,且分别有13个和19个分区,则整个集群上会相应会生成共32个文件夹(本文所用集群共8个节点,此处topic1和topic2 replication-factor均为1)。

五、适用场景

Messaging

对于一些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可使kafka具备良好的扩展性和性能优点.不过到目前为止,咱们应该很清楚认识到,kafka并无提供JMS中的"事务性""消息传输担保(消息确认机制)""消息分组"等企业级特性;kafka只能使用做为"常规"的消息系统,在必定程度上,还没有确保消息的发送与接收绝对可靠(好比,消息重发,消息发送丢失等)

Website activity tracking

kafka能够做为"网站活性跟踪"的最佳工具;能够将网页/用户操做等信息发送到kafka中.并实时监控,或者离线统计分析等

Metrics

Kafka一般被用于可操做的监控数据。这包括从分布式应用程序来的聚合统计用来生产集中的运营数据提要。

Log Aggregation

kafka的特性决定它很是适合做为"日志收集中心";application能够将操做日志"批量""异步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka能够批量提交消息/压缩消息等,这对producer端而言,几乎感受不到性能的开支.此时consumer端可使hadoop等其余系统化的存储和分析系统。

最后,关注公众号民工哥技术之路,能够获取我整理的 消息队列、中间件相关的技术文章、面试题精选,很是齐全。

连接:https://blog.csdn.net/code52/...

相关文章
相关标签/搜索