一、kafka的特性
- 高吞吐量,低延迟:kafka每秒可以处理几十万条信息,它的延迟最低只有几毫秒。每个topic可以分为多个partition,consume group 对partition进行消费。
- 可扩展性:kafka集群支持热扩展。
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)。
- 高并发:支持上千个客户端并发访问。
二、kafka的使用场景
1. 日志收集:收集各服务日志,以统一接口。
2. 消息系统:解耦生产者和消费者,缓存消息等。
3. 用户活动跟踪:用户在各个服务器中的活动统一发至kafka,由消费者进行统一收集和分析。
4. 运用指标:用于记录运营监控数据。
5. 流式处理。
6. 事件源。
三、kafka的设计思想
- kafka broker leader:所有的kafka broker节点一起去服务注册中心(zookeeper)注册,注册成功的这个节点被称为kafka broker controller,其它节点则成为kafka broker follower。这个controller会监听其它follower的所有信息。一旦controller宕机,zookeeper会通知其它follower进行新一轮选举。
- 分布式消费:消息分布式存在每个partition中,同一条消息只可以被同一个group的一个consumer消费,但却可以被多个不同group的consumer消费。一个topic拥有多个partition,kafka会把一个topic下的所有partition rebalance至每个订阅此topic的consumer,但一个partition只能属于一个consumer,一个consumer可以有多个partiotion。因此,当consumer数量大于partition数量的时候,会有闲置的consumer分配不到partiion从而浪费资源。