Kafka初探

场景->需求->解决方案->应用->原理

我该如何去设计消息中间件--借鉴/完善

场景

跨进程通信(进程间生产消费模型)

需求

基本需求
  • 实现消息的发送和接收。

    NIO通信 (序列化/反序列化)--dubbo、avro、protobuf、zk(jute)

  • 实现消息的存储(持久化/非持久化)

    数据库存储、文件存储(磁盘:顺序读写、页缓存、持久化的时机(落盘策略)、零拷贝)、内存

  • 是否支持跨语言(多语言生态)

  • 消息的确认(确认机制)--在跨进程通信中 ->业务逻辑需求

  • 是否支持集群

    自己实现选举、第三方的实现(zk)

高级需求
  • 是否支持有序(业务逻辑)

  • 是否支持事务消息(业务逻辑)->最终一致性

  • 是否支持高并发和大数据的存储

  • 是否支持可靠性存储

  • 是否支持多协议

  • 是否收费

发展

pub/sub--金融领域--TIB(规则)

非个性化需求, 而是共性化需求

IBM websphere mq(商业)

JMS协议->Java api->AMQP(通用性)

kafka
  1. 起源:LinkedIn 活动流 运营数据 诞生之初就是为了解决大数据量的问题

  2. 简介

    实现语言:scala

  3. 架构图 

  4. 下载及安装

    单节点安装:

    sudo wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3.0.tgz

    注意點:

    • 必须安装zk(启动时必须先启动zk),详情请参考

      https://www.cnblogs.com/java333/p/11107166.html

    • 远程安装 必须修改一下两个属性

      #本机ip
      listeners=PLAINTEXT://‘本机ip’:9092
      #zk地址
      zookeeper.connect=localhost:2181
    • 启动命令

    sh kafka-server-start.sh -daemon server.properties

    集群安装:

    • 多机器部署

      • 下载安装同单机,主要修改配置文件server.properties文件配置

      #zookeeper地址(三个节点相同)
      zookeeper.connect=192.168.1.11:2181
      #broker.id(三个节点分别为0、1、2)
      broker.id=1
      ##监听协议(三个节点配置各自的ip地址)
      listeners=PLAINTEXT://192.168.1.12:9092

    • 伪集群部署

      在单节点创建文件目录进行设置。参考上述多机器部署。

  5. 基本操作

     

    ##创建topic--创建成功后可以在zk客户端看到此消息
    sh kafka-topics.sh --create --zookeeper 192.168.1.11:2181 -replication-factor 1 --partitions 1 --topic test
    ##消费监听消息
    sh kafka-console-consumer.sh --bootstrap-server 192.168.1.11:9092 --topic test --from-beginning
    ##生产消息
    sh kafka-console-producer.sh --broker-list 192.168.1.11:9092 --topic test

消息中间件的应用场景

不同的业务领域,异步,解耦,削峰

  1. 注册新用户(用户中心)

    ->发送理财金/优惠券;为了增加复购->赠送一些优惠券(营销服务)

  2. 秒杀场景(流量大,商品少)

最新文章

  1. block为什么用copy以及如何解决循环引用
  2. Nginx模块fastcgi_cache的几个注意点
  3. Hibernate 配置派生属性
  4. 2014年11月17号------html起始
  5. 课后习题 SPJ
  6. angularjs + seajs构建Web Form3
  7. 向.net后端发送请求获取数据,在前端动态填充表格
  8. 关于abp中使用的sweetalert对话框组件的confirm确认对话框中的一个坑
  9. Tomcat8.5.24日志自动清理(maxDays)功能探究
  10. Maven-08: 插件的配置
  11. 带你精读你不知道的Javasript(上)(一)
  12. 补充的flask实例化参数以及信号
  13. 目标检测算法之Fast R-CNN算法详解
  14. Linux配置mail客户端发送邮件
  15. default activity not found的问题
  16. Bootstrap源码分析系列之整体架构
  17. 简洁的python测试框架——Croner
  18. BZOJ4614 UVA1742 Oil 计算几何+搜索+扫描线
  19. 哪个类可用于处理 Unicode?
  20. 如何发挥ERP系统中的财务监控职能?

热门文章

  1. Servlet获取POST方法请求体数据
  2. React Native常用的第三方开源库
  3. Daily in Ipin
  4. 为什么单个TCP连接很难占满带宽
  5. ASP.NET Core 入门笔记10,ASP.NET Core 中间件(Middleware)入门
  6. Linux特殊权限位suid、sgid深度详细及实践
  7. 菜鸟系列k8s——快速部署k8s集群
  8. 2019牛客暑期多校训练营(第九场)-D Knapsack Cryptosystem (折半搜索)
  9. Python之数据库
  10. Prefix to Infix Conversion