kafka—走进kafka

    技术2023-05-30  68

    常见的两种消息引擎范型

    消息队列模型 基于队列提供消息的传输服务,提供了一种点对点的消息传递方式 (一个发送者对应一个接受者),一旦消息被消费就会从队列中移除,每条消息只能被一个消费者消费发布订阅模型 发布者将消息发送到topic中,订阅者订阅topic获取消息

    kafka概述

    kafka是一个多分区,多副本基于zookeeper协调的分布式消息系统,它以高吞吐,可持久化,可水平扩展的,支持数据流处理等多种特性而被广泛应用

    kafka的使用场景

    消息传输 日志收集 用户行为数据 监控性指标流失处理:0.10版本推出了流式处理组件kafka stream

    kafka基础概念

    producer:生产者 consumer:消费者 broker:服务代理节点,其实就是一个kafka服务节点 topic: 一类别的消息(逻辑) partition:kafka的下级结构,为了提升吞吐量引入 replica:副本,为实现高可靠性使用冗余机制,kafka副本实现"一主多从"模式 offset:位移,每条消息对应一个位移的序列 message: 消息实体 consumer group:消费者组 (逻辑概念),多个消费者同属一个消费者组,那么消费者组的多个消费者共同消费topic,每个消费者消费一个或多个分区,一个分区只允许一个消费者消费

    kafka的版本变迁  

    生产者和消费者新老版本对比

    KfkaCounsumer新版本对比旧版本的优点

    单线程设计,单个Cousumer线程管理多个分区的消费Socket连接,极大简化了实现

    位移提交与保存交由kafka处理,不再保存到zookeeper,避免了zookeeper频繁读写的性能瓶颈

    实现了一个集中式协调者(coordinator)的角色,所有消费者组成员管理交由coordinator负责,不再依赖于zookeeper,对于消费者组的管理更加可控

    KafkaProducer新版本对比旧版本的有优势

    发送过程划分为两个不同的线程:用户主线程和Sender IO线程,逻辑更容易控制

    完全异步发送消息,并提供回调机制(callback),判断消息发送与否

    批量发送:每个批次包含多个发送请求,提升吞吐量

    更加合理的分区策略:对于没有指定key的消息,旧版本是默认某段时间发送到固定分区,新版采用轮询方式,消息发送更加均衡

    底层统一使用java Selector的网络客户端,结合java的Future实现更加健壮的生命周期管理

    Processed: 0.018, SQL: 9