一、简介
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,[4]这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库
kafka是一个分布式的、高吞吐量、高可拓展性的消息队列服务
消息队列 是一种 进程间通信或同一进程不同线程间的通信方式,其使用场景有
- 异步处理
- 应用解耦
- 流量削峰
二、基本原理
基本组件
- broker 消息中间件处理节点
- topic 消息都有一个类别topic,生产者发布topic,消费者订阅topic
- partition 存放消息的队列
- 同一topic进一步细分,存放在不同broker
- 同一partition内的消息有序,同一topic中的多个partition未必有序
- producer 消息生产者,向broker发送消息的客户端
- consumer 消息消费者,从broker读取消息的客户端,consumer通过offset标识 已消费消息 的位置
- consumer group 消费者组,不同组可消费同一条消息,同个组只可消费一次
- zookeeper 调度中心
基本流程
- 心跳请求 客户端主动连接castle,请求需要往哪个集群上生产和消费
- 心跳响应 zookeeper返回客户端broker的ip地址
- 客户端连接broker,生产或消费到broker上
消息发送
- 策略 同一topic的消息发到哪个partition上
- 轮询
- 随机
- 按消息键保序 保证同一个key的所有消息都进入相同的分区中
消息消费
- 策略 同一个消费组内对同一个topic怎么分配partition
- range 以消费者线程为单位平均分配partition,余数分配给前置线程
消息可靠性
- 备份
- 为partition提供多个replication,分配到其他broker节点上
- replication节点中有leader和follower,leader负责发送消息,同步消息到follower
- 重试机制
- 消费 重试达一定次数后跳过,放入死信队列
三、简单使用
待补充