kafka 的基本概念及使用场景
本文为博主原创,未经允许不得转载:
1. Kafka 的使用场景:
1.日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种 consumer,例如hadoop、Hbase、Solr等。
2. 消息系统:解耦和生产者和消费者、缓存消息等。
3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过
订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
4. 运营指标:Kafka也经常用来记录运营监控数据。
2. 基本概念:
kafka是一个分布式的,分区的消息(官方称之为commit log)服务。
Broker :消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
Topic : Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
Producer : 消息生产者,向Broker发送消息的客户端
Consumer : 消息消费者,从Broker读取消息的客户端
ConsumerGroup : 每个Consumer属于一个特定的ConsumerGroup,一条消息可以被多个不同的Consumer Group消费,
但是一个Consumer Group中只能有一个Consumer能够消费该消息
Partition : 物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的
producer通过网络发送消息到Kafka集群,然后consumer来进行消费,
Partition是一个有序的message序列,这些message按顺序添加到一个叫做commit log的文件中。
每个partition中的消息都有一个唯一的编号,称之为offset,用来唯一标示某个分区中的message。
提示:每个partition,都对应一个commit log文件。一个partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的。
每个consumer是基于自己在commit log中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护;
一般情况下我们按照顺序逐条消费commit log中的消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息
这意味kafka中的consumer对集群的影响是非常小的,添加一个或者减少一个consumer,对于集群或者其他consumer来说,都是没有影响的,
因为每个consumer维护各自的offset。所以说kafka集群是无状态的,性能不会因为consumer数量受太多影响。
kafka还将很多关键信息记录在zookeeper里,保证自己的无状态,从而在水平扩容时非常方便。
为什么要对Topic下数据进行分区存储?
Producers
Consumers
消费顺序
Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费顺序性。