kafka架构----kafka高级----kafka集群----kafka源码

  • kafka介绍(数据缓存管道):kafka是一个分布式、分区的、多副本的、多生产者、多订阅者基于zookeeper的协调的分布式MQ系统。常见的可用于web/nginx日志访问日志,消息服务。2010linkedin贡献给apache。
  • 应用:日志收集系统以及消息系统。
  • 两种主要的消息传递模式:点对点和发布订阅模式。kafka是发布订阅模式。
  • kafka只有消息的拉取没有推送。kafka及群众按照主题分类管理。
  • Producer api,Consumer api,Streams api,Connector api。
  • kafka优势:

  • 1.高吞吐量(TB);2.高性能(千台客户端);3.持久化数据存储;4.分布式易扩展;5.可靠性:容错机制;6.客户端状态维护:消息被处理的状态是在Consumer端维护;7.支持online和offline;8.支持多种客户端语言。
  • 日志:用kafka可以收集各种服务的log,通过统一接口服务形式开放给各种Consumer;
  • 消息系统:解耦生产者和消费者、缓存消息;
  • 用户活动跟踪:kafka经常用来记录web用户app各种活动。做实时监控。
  • 运营指标:kafka也经常用来记录运营监控数据。包括各种分布式数据,生产数据。
  • 基本架构:

  • 消息和批次:kafka的数据单元称为消息。为了提高效率消息被分批写入kafka。批次就是一组消息,这些消息属于同一个主题和分区。
  • 分批可以减少网络开销。对key hash取模来分区。
  • 消息模式:如JSON或XML,但他们缺乏强类型处理能力。kafka开发者喜欢avro,提供了一种紧凑的序列化格式。
  • 消费者组:每个分区只能被一个消费者使用。
  • broker:一个独立的kafka服务器被称为broker。broker接受来自生产者的消息,为消息设置偏移量,并提交消息到磁盘。broke为消费者提供服务,对读取分区的请求作出响应。
  • 核心概念

  • producer:生产者创建消息。并将消息发送到不同的topic中。brocker接收到生产者消息后,brocker将消息追加到当前用于追加数据的serment中。
  • 消费者:消费者订阅主题,按照消息的生成顺序读取,检查消息的偏移量来区分已经度过的消息。消费组保证每个分区只能被一个消费者使用。如果一个消费者失效,群组其他消费者可以接管失效的消费者工作。
  • brocker:独立的kafka服务器称为brocker。多个brocker组成一个集群,每个集群都有一个brocker充当集群控制器的角色,自动选举。
  • 控制器负责管理工作:包括分配分区给brocker和监控brocker。
  • 集群中,一个分区从属与一个brocker(首领分区)。
  • 每条发布到kafka的消息都有一个topic。partition主题可以分为若干分区,一个分区就是一个提交日志。
  • 消息以追加的方式写入分区(队列),然后以先入先出的顺序读取。
  • Replicas:每一个分区都有副本。leader和follwer副本。同步副本以及不同步副本。
  • HW高水位:表示了一个特定消息的偏移量,消费只能拉取到这个offset之前的消息;LEO下一条日志写入偏移量。
  • Kafka的安装与配置

  • 解压kafka-tar;配置zookeeper地址。启动配置文件。
  • kafka-topics.sh管理topic相关问题。kafka-console-producer.sh作为生产者。kafka-console-consumer.sh作为消费者。
  • kafka-springboot框架集合(kafkaTemplate)。
    • 服务端配置:server.properties文件中的配置:1.zookeeper.connect:配置kafka要连接的zk集群地址,逗号分隔机器地址。2.listeners:监听器;进行内外网隔离;
  • Kafka高级特性:

  • Producer创建产生send线程;生产消息时内部异步;分区之后进入缓冲区;落盘到broker;返回生产元数据给生产者。
  • broker配置:
    • 配置条目使用方式:Map configs = new HashMap<>();
    • configs.put("bootstrap.servers", ",,,,");---
    • configs.put("key.serializer","");---
    • configs.put("value.serializer","");---
    • configs.put("acks","012");---0-生产者不等待broker任何消息确认。只要将消息放到socket缓冲区就认为消息已发送。不关心失败。---1-leader将记录写到它本地日志,就响应客户端消息确认,不等待follower副本的确认。如果leader确认宕机了,就会丢失消息,因为follwer副本没有同步该消息。---all-L等待所有副本确认该消息,保证只要有一个同步副本存在,消息就不会丢失。
  • 序列化器:kafka中数据都是字节数组,发送kafka之前必须将消息(KEY/VALUE)进行序列化。自定义序列化器:实现serialize()方法;原始对象经过字节数组然后序列化为框架中使用的对象。序列化器在旧对象的基础上定义了新的对象,在代码中指定序列化器自动完成序列化工作(send)。自定义类实现对应的接口即可。
  • 分区器:默认分区----record提供了分区号,使用record提供的分区号。若无分区号则使用key序列化后的hash值对分区数量取模。若无Key指定则使用轮询的方式分配分区号。
    • 自定义分区:实现Partitioner接口:重写partition方法。添加配置信息即可。
  • 拦截器:producer拦截器和consumer端interceptor是在kafka0.10引入,主要实现Client端的定制化逻辑。Interceptor使得用户在消息发送前对消息做定制化修改。可以指定多个拦截器实现拦截链。拦截并形成新的Record。
    • 包括onSend(ProducerRecord):封装进kafkaProducer,producer的消息发送时调用该方法。onAcknowledge(metadata):broker返回给producer的回调时候调用该方法。
    • 自定义拦截器重写onSend(返回新的Record对象)以及onAck()。
  • 生产者参数配置:方式configs。retry.backoff.ms(重发间隔)/retries(最大次数)/request.timeout.ms(最大等待时间)/Intercepter.classes(生产者接收消息)/acks。
  • 消费者:
    • 消费者、消费者组:从同一主题消费的消费者可以加入到一个消费组中。消费组均衡的给消费者分配分区。每个分区只有一个消费者可以消费。消费者多余分区数,则会闲置。
    • 一个主题对应多个消费组。同一个组内的消费者指定唯一一个分区,但是不同的组消费者可以同一个分区。
    • 再均衡影响消费。
    • 心跳:broker和consumer之间存在心跳发送逻辑。分区心跳超时,消费者主动离开消费组。
  • 订阅机制:topic分类管理依据、partition物理上的概念,同一个topic分散到多个partition,这些par可以在多个机器上也可以在同一个机器上。par的数量是brokerserver的整数倍。consumer采用pull模式从broker中读取数据。consumer可自主控制消费消息的速率。
  • 反序列化:kafka的broker中所有的消息都是字节数组,消费者获取消息之后,需要先对消息进行反序列化处理,然后才能交给用户程序消费处理。需要实现org.apache.kafka.common.serialization.Deserializer接口。
  • 位移提交:向kafka记录自己的位移数据,这个汇报过程称为提交位移。consumer需要为分配给它的每个分区提交各自的位移数据。可以设置自动提交。若提交前发生rebalance则只会从上一次提交之处恢复,存在重复提交情况。
  • 消费者位移管理:api管理消费者自己的位移。
  • 手动给消费者分配分区;
  • 再均衡:规定了如何让消费者组下的所有消费者来重新平均分配topic中的每一个分区。比如一个topic有100个分区,一个消费者组内有20个消费者,在协调者下组内每一个消费者分配到5个分区。
    • 触发条件:消费者组内成员发生变更,这个变更包括增加和减少消费者;分区数的变更,kafka目前只支持增加分区;订阅的主题发生变化,当消费者组使用正则订阅,恰好新建了对应的主题。
    • 重平衡过程中消费者无法从kafka消费消息,kafka节点众多,可能造成的损失达数小时。平常应当避免这种情况的发生。
    • 避免因为kafka的误判导致的rebalance。控制心跳频率,两次拉取时间间隔拉大,心跳判断时间。
  • 消费者拦截器:消费者拉取分区消息之后,先经过反序列化对kv进行处理。之后若果设置了拦截器,则需经过拦截器之后才能返回。实现ConsumerInterceptor接口。
  • 消费者参数配置;
  • 消费组管理:group是kafka提供的可扩展具有容错的消费机制。1.多个消费者;2.group.id是一个字符串;3.每个分区给一个消费者。
  • kafka提供了一个角色:GroupCoordinator协调器来执行消费组的管理。当消费组第一个消费者启动时候,它会去和kafka broker确定谁是它们组的组协调器。
  • 主题管理:包括配置信息的增删;分区只能增加,--alter方法。
  • 分区副本:1.均衡分散在各个broker;2.对某个broker上分配的分区,它的副本在其他broker上;3.所有broker都有机架信息,尽量将分区的各个副本分配到不同的机架上的broker。
  • kafkaAdminClient:使用kafka的bin下脚本工具管理kafka。可以使用api将某些管理查看功能。
  • 副本机制:kafka每个分区都有一个leader副本和多个follower副本;副本总数构成副本因子;读取写入由leader副本负责;(高可用)follower只负责同步leader。分区是为了进行横向扩展
  • leader选举:过半机制。维护一个动态变化的ISR集合,一旦leader失去,则随机选择一个follower副本来替换。
  • 分区重新分配:新增的kafka节点不会自动分担集群数据,需要手动重新划分。kafka-reassign-partitions.sh。
  • 修改副本因子:由于主题的副本因子设置的问题,需要重新设置副本因子。
  • 分区分配策略;
  • 日志存储:.log/.index/.timestamp/.snapshot等;分区日志中包含有很多的LogSegment;快速定位日志;
  • 日志索引(??)
  • 日志清理:日志删除、日志压缩。不满足条件的日志数据进行删除、有相同key的不同v,仅保留最后的版本。log.cleanup.policy参数配置。日志分段对应的时间戳索引文件,查找时间戳索引文件最后一项。
  • kafka事务:
  • 集群应用场景:1.消息传递;2.网站活动路由;3.监控指标;4.日志汇总;5.流处理‘6.活动采购;7.提交日志;

​​​​​​​

4.2 Kafka学习相关推荐

  1. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  2. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  3. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  4. Kafka学习-入门

    在上一篇kafka简介的基础之上,本篇主要介绍如何快速的运行kafka. 在进行如下配置前,首先要启动Zookeeper. 配置单机kafka 1.进入kafka解压目录 2.启动kafka bin\ ...

  5. Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

    1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...

  6. Kafka学习之四 Kafka常用命令

    2019独角兽企业重金招聘Python工程师标准>>> Kafka学习之四 Kafka常用命令 Kafka常用命令 以下是kafka常用命令行总结: 1.查看topic的详细信息 . ...

  7. J1angの小白式kafka学习总结(1)

    kafka学习阶段性总结(1) kafka概述 基本概念:什么是kafka 消息队列的两种模式 为什么要使用kafka kafka的基本架构组成 kafka架构 kafka组成 集群配置 jar包下载 ...

  8. kafka学习武林秘籍

    kafka学习教程分享 链接:https://pan.baidu.com/s/13nqDiX5yrXb6-X2OJddsoQ  提取码:njqf

  9. Kafka学习【1】

    Kafka学习[1] Kafka的用途有哪些?使用场景如何?### 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦.冗余存储.流量削峰.缓冲.异步通信.扩展性.可恢复性等功 ...

  10. Kafka学习记录(三)——Broker

    Kafka学习记录(三)--Broker 目录 Kafka学习记录(三)--Broker 对应课程 Zookeeper存储的Kafka信息 Broker总体工作流程 Broker的服役和退役 Kafk ...

最新文章

  1. Shodan搜索引擎开始披露恶意软件控制服务器
  2. 配置Win Server 2008 R2 防火墙允许远程访问SQL Server 2008 R2
  3. 【机器学习】算法大全
  4. USB转串口 FT232/PL2303/CH340 驱动以及使用体会
  5. SQL基础E-R图画法(二)
  6. 设置ComboBox控件的提示内容.
  7. 避免踩坑:易盾安全老司机起底Android九大漏洞,附解决建议
  8. PHP字符串处理函数
  9. XNOR.ai融资1200万美元
  10. 生成式对抗神经网络code实现
  11. [转载] 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)
  12. 《游戏设计师修炼之道:数据驱动的游戏设计》一3.2 漏洞管理计划和技术开发...
  13. 比特币一种点对点的电子现金系统是哪一年诞生的_庆比特币诞生12周年|带你回顾比特币的前世今生...
  14. Oracle批量修改字段长度
  15. 选择正确的C/C++ runtime library
  16. 运放输入偏置电流方向_运算放大器输入偏置电流的两种测试方法研究
  17. 细数APDL中的流程控制命令
  18. 微信小程序base64图片转换临时链接
  19. Shader实现高光反射
  20. 组装苹果xsmax价格是多少?

热门文章

  1. 强缓存和弱缓存是什么
  2. QQ农场牧场源码V4.0
  3. 六十六条经典禅语,备受启发!
  4. 【文本分类】《融合后验概率校准训练的文本分类算法》
  5. 蓝桥杯——十六进制转八进制(Java解法)
  6. python判断用户名是否合法_Python校验用户名是否合法示例
  7. TV Scaler PP Rotator介绍
  8. My piano dream.....
  9. OpenCV-Python图像像素直方图
  10. [附源码]计算机毕业设计Node.js星空摄影网站论文(程序+LW)