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

分布式消息中间件之kafka设计思想及基本介绍(一)的更多相关文章

  1. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

  2. 分布式系列九: kafka

    分布式系列九: kafka概念 官网上的介绍是kafka是apache的一种分布式流处理平台. 最初由Linkedin开发, 使用Scala编写. 具有高性能,高吞吐量的特定. 包含三个关键能力: 发 ...

  3. Kafka/Metaq设计思想学习笔记 转

    转载自: http://my.oschina.net/geecoodeer/blog/194829 本文没有特意区分它们之间的区别,仅仅是列出其中笔者认为好的设计思想,供后续设计参考. 目前笔者并没有 ...

  4. Kafka详解四:Kafka的设计思想、理念

    问题导读 1.Kafka的设计基本思想是什么?2.Kafka消息转运过程中是如何确保消息的可靠性的? 本节主要从整体角度介绍Kafka的设计思想,其中的每个理念都可以深入研究,以后我可能会发专题文章做 ...

  5. kafka具体解释四:Kafka的设计思想、理念

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/suifeng3051/article/details/37606001      本节主要从总体角度 ...

  6. 从一般分布式设计看HDFS设计思想与架构

     要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码.懂得了"所以然"才能在实际使用中灵活运用.快速解决遇到的问题.下面这篇博文我们就先 ...

  7. Kafka 设计与原理详解

    一.Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料. 转载请注明出处 : 本文链接 1.1 背景历史 当今社会各种应用系统诸如商业.社交.搜索. ...

  8. kafka之二:Kafka 设计与原理详解

    一.Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料. 转载请注明出处 : 本文链接 1.1 背景历史 当今社会各种应用系统诸如商业.社交.搜索. ...

  9. [转载] 360分布式存储系统Bada的设计和应用

    原文: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=208931479&idx=1&sn=1dc6ea4fa28a ...

随机推荐

  1. elk收集tomcat的日志

    logstash收集tomcat的日志 不要修改下tomcat中server.xml的日志格式,否则tomcat无法启动,试过多次,不行,就用自带的日志让logstash去收集 首先给tomcat日志 ...

  2. 数据库版本管理工具--Flyway的使用

    软件开发正常流程是:开发环境 ---> 测试环境  ----> 产环境 在开发过程中经常需要变更数据库: 表结构变更. 基础数据变更. 最直接的做法是:用客户端连上数据库直接修改. 依次修 ...

  3. STS如何将一个文件夹设置缺省的创建路径(build path)

    STS中的build path是一种缺省的路径,相当于windows的环境变量中的path,利用它可以将jsp等文件放入其中,程序只需要文件名就可以找到它. (1)在Package Explorer中 ...

  4. lua程序设计(第4版)第二章习题

    练习2.1:修改八皇后问题的程序,使其在输出第一个解后即停止运行. 解法:要使得有一个解就返回,首先要获得一个解,然后再返回或停止运行 练习2.2:解决八皇后问题的另一种方式是,先生成1-8之间的所有 ...

  5. freeRTOS学习二

    临界段,用一句话概括就是一段在执行时不能被中断的代码段. 临界段被打断的情况,一个是系统调度,还有一个就是外部中断. 对临界段的保护就是对中断的开和关. 空闲任务与阻塞延时 xTicksToDelay ...

  6. python 调试技巧

    1.以前都是用print来定位哪里报错,后面发现一个新的调试技巧 import pdb for i in range(nrows): : content = table.row_values(i) p ...

  7. mysql数据库之视图、触发器

    视图 概念:通过查询得到的一张虚拟表,然后保存下来就是视图 视图的好处:如果要频繁使用某张虚拟表,那么就可以保存为视图,以后查找就直接拿这个视图就会非常方便 视图语法规则: create view t ...

  8. 深拷贝 & 浅拷贝

    浅拷贝: class Professor { String name; int age; public Professor(String name, int age) { this.name = na ...

  9. A.Who is better?(The Preliminary Contest for ICPC Asia Xuzhou 2019)

    https://nanti.jisuanke.com/t/41383 解: 斐波那契博弈+中国剩余定理. #include <bits/stdc++.h> using namespace ...

  10. tp5支付宝和微信支付

    一.生成二维码给用户进行扫码支付 1.先在vendor目录下加入支付宝和微信支付的引用 2.付款处调用 /** * 订单支付接口 * * @api {post} {:url('order/pay')} ...