zoukankan      html  css  js  c++  java
  • 分布式消息中间件之kafka设计思想及基本介绍(一)

    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. 秒杀场景(流量大,商品少)

     

  • 相关阅读:
    .Net内存回收
    select rank() over
    Android中如何区分界面组件创建和销毁的类型
    Thread和Runnable的区别
    Intent对象若干数据项的含义总结
    libcurl用法
    Hadoop 使用Combiner提高Map/Reduce程序效率
    Struts2中的get、set方法作用:
    struts2 使用jsonplugin
    struts.custom.i18n.resources国际化详解(一)
  • 原文地址:https://www.cnblogs.com/java333/p/11355442.html
Copyright © 2011-2022 走看看