kafka是用来干嘛的? 一个系统通常拥有许多的应用场景,比如聊天,购物,前端交互等,每个场景的数据进行单独分析的时候需要有各自的队列来搜集数据,然后分发给各自的后台来处理数据,各自的维护成本大,kafka则可以用来解决这些问题,它提供了多个数据的入口,并可以分发给下游多个地方消费
1. 支持多个生产者
2. 支持多个消费者从一个单独的消息流上读取数据,而且消费者之间不会相互影响。如果消费者群主,可以保证整个群组对每个给定的消息只处理一次
3. 消息可以落地磁盘,如果消费者被关闭了,可以从上次停止的地方继续读取
4. 支持broker的扩展
5. 能保证亚秒级的消息延迟
1. kafka提供一个二进制协议,指定请求消息格式。broker会在它所监听的端口上运行Acceptor线程,它会创建连接给processor(网络线程)程处理,processor获取请求消息后扔到请求队列,由IO线程来处理请求,然后结果被写入响应队列,processor从中取出响应给kafka客户端。 2. kafka客户端一般会缓存各首领副本的信息,当发送请求接受的broker不是首领副本的时候,返回 非分区首领 异常,这时候客户端会先刷新元数据,再重新发送请求(也会有一个时间间隔来定时更新客户端的元数据)
kafka权威指南