kafka学习笔记

1. kafka的简介

kafka之前是LinkedIn在2011年开源项目,并且也是在2011年加入Apache基金会. Apache kafka是消息中间件的一种.
参考例子说明:
生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。

具体特性参考官网文档

2. Kafka的设计和结构

2.1 kafka基本概念
  • producer:消息和数据的生产者,就是它来生产“鸡蛋”的。
  • consumer:消息和数据的消费者,生出的“鸡蛋”它来消费。
  • consumer group: 对于同一个topic会广播给不同的group,一个group中只有一个consumer可以消费该消息。
  • topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡 蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。
  • broker:kafka集群中的每个kafka节点, 就是篮子了。
  • partition: kafka下数据存储的单元.一个topic数据会被分散存储到多个partition,每一个partition是有序的.
2.2 kafka基本结构

在这里插入图片描述
kafka特点:

  • 分布式特点
    多分区, 多副本, 多订阅者(即kafka的一个topic可以有一个或者多个订阅者,但是订阅者数量要少于topic的数量), 基于ZooKeeper的调度.
  • 高性能特点
    高吞吐量, 低延迟, 高并发, 时间复杂度为O(1).
  • 持久性和扩展性
    数据可持久化, 容错性, 支持在线水平扩展, 消息自动平衡

3. kafka的应用场景

  • 消息队列
  • 行为跟踪
  • 元数据监控
  • 日志收集
  • 流处理
  • 事件源
  • 持久性日志

4. kafka的使用

4.1 下载并安装
4.2 基于docker安装

参考大神的博客地址
docker-compose.yml文件如下:

version: '2'
services:
  zk_server: 
    image: daocloud.io/library/zookeeper:3.3.6
    restart: always
  kafka_server: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
    command: /bin/sh -c '/usr/local/work/start_server.sh'
    restart: always
  message_producer: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
      - kafka_server:kafkahost
    restart: always
  message_consumer: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
    restart: always
4.3 kafka的项目中使用的示例

参考代码

5. kafka高级特性

5.1 消息事务
数据传输的事务定义:
1. 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不被传输.
2. 最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.
3. 精确的一次: 不会漏发送也不会重复发送,每个消息仅被传输一次.
事务保证:
1. 内部重试问题: Procedure幂等处理
2. 多分区原子写入 
5.2 零拷贝
在kafka中,使用sendfile调用减少了数据从磁盘读取到发送的之间的内核态到用户态之间的状态转换。
标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值