简述:
Kafka是一个消息中间件,一个分布式的流平台, 是Spark生态中重要的组件,支持分布式,高可用,高吞吐,多副本
是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统
Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
能力:
1. 发布和订阅流数据,类似消息队列或消息系统
2. 高容错存储流数据
3. 支持处理数据流
Kafka能解决什么问题:
1. 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
2. 消息系统:解耦和生产者和消费者、缓存消息等。
3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
4. 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
5. 流式处理:比如spark streaming和storm
重要概念:
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker
Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Producer:负责发布消息到Kafka broker
Consumer:消息消费者,向Kafka broker读取消息的客户端。
Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
Partition: Partition是物理上的概念,每个Topic包含一个或多个Partition.
Leader:每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition。
Follower:Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步。如果Leader失效,则从Follower中选举出一个新的Leader。
Kafka特性:
1. 支持Hadoop并行数据加载
2. 高吞吐量 [2] :即使是非常普通的硬件Kafka也可以支持每秒数百万 [2] 的消息
3. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
4. 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
5. 同时支持离线数据处理和实时数据处理。
俩种模式:
1. 发布订阅消息传输模式
2. 点对点消息队列传输模式