什么是Kafka
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。Kafka可以将数据实时地将数据从一个系统传输到另一个系统,并且可以支持跨终端的传输数据流,并且可以支持数据的离线处理和批量处理。Kafka是一个分布式的可靠性信息系统,允许客户端应用程序处理数据流。
kafka现在被广泛用做消息中间件,其实它本质是一个数据存储流平台,只是我们平时在做消息发布和消息消费的时候会将它作为消息中间件来使用。kafka在设计之初是采用分布式架构设计的,基于集群的方式工作,所以kafka构建集群非常简单。
kafka主要特性
Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
- 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
- 高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
- 支持通过Kafka服务器和消费机集群来分区消息。
- 支持Hadoop并行数据加载。
优点:
- 高吞吐、低延迟、高性能。kafka收发消息非常快,kafka每秒可以处理几十万条数据,最低延迟只有几毫秒。
- 持久性、可靠性、基于磁盘的数据存储。kafka允许数据的持久化存储,支持数据备份防止数据丢失,kafka底层的数据存储是基于Zookeeper存储的。
- 容错性:允许集群中节点失败,某个节点宕机,kafka集群可以正常工作。
缺点:
- 对zookeeper依赖性较强
- 运维的难度较大,Kafka的设计复杂,需要一定的技术知识才可以正确安装和配置。Kafka的部署非常复杂,需要较好的基础设施和稳定的服务器架构。
kafka基本架构
Kafka有三个主要的组件,分别是Producer(生产者),Consumer(消费者)和Broker(中间件)。
-
Producer:Producer是一个应用程序,用于将消息发布到Kafka集群中的一个或多个主题(topics)中。 "Producer" 负责发布消息到Kafka broker
-
Consumer:Consumer是一个应用程序,用于从Kafka集群中的一个或多个主题(topics)中消费消息。"Consumer" 消息消费者,向Kafka broker读取消息的客户端。
-
Broker:Broker是一个Kafka集群的实例,可以用来接收,存储和转发来自Producer的消息,并将消息分发给Consumer。 "Broker" Kafka集群包含一个或多个服务器,这种服务器被称为broker
-
"Topic" 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
-
"Partition" Partition是物理上的概念,每个Topic包含一个或多个Partition.
-
"Consumer Group" 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
Kafka 的使用场景
-
日志跟踪:Kafka可以用于追踪系统中的事件日志,可以将日志实时地发布到Kafka集群,以便支持日志的实时跟踪和分析。Kafka 的基本概念来源于提交日志,比如我们可以把数据库的更新发送到 Kafka 上,用来记录数据库的更新时间,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等Kafka 可以用来跟踪用户行为,比如我们经常淘宝购物,你打开淘宝的那一刻,你的登陆信息,登陆次数都会作为消息传输到 Kafka ,当你浏览购物的时候,你的浏览信息,你的搜索指数,你的购物爱好都会作为一个个消息传递给 Kafka ,这样就可以生成报告,可以做智能推荐,购买喜好等;
-
传递消息:Kafka 另外一个基本用途是传递消息,应用程序向用户发送通知就是通过传递消息来实现的,这些应用组件可以生成消息,而不需要关心消息的格式,也不需要关心消息是如何发送的;
-
监控:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告; 4.流式处理:流式处理是有一个能够提供多种应用程序的领域;限流可以将数据从一个系统流式传输到另一个系统,并将数据处理为各种形式,如统计,聚合,报表等。