zoukankan      html  css  js  c++  java
  • kafak学习(一)

    发布与订阅消息系统。

    数据(消息)的发送者不会直接把消息发送给接受者,这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类,接受者订阅他们,以便接受特定类型的消息。发布与订阅系统一般会有一个broker,也就是发布消息的中心点。
     
     
    传统的交互方式: 用户>应用服务器>db 缺点:高并发服务器压力很大。
    使用消息队列来替换db连接:用户>应用服务器>消息队列>db处理
     

    生产者和消费者

     
    kafak的客户端就是kafka的用户,他们被分为两种基本类型:生产者和消费者。除此之外还有其他高级客户端API,用于数据集成的kafka-connect API 和用于流式处理的kafka streams。这些高级客户端API使用生产者和消费者作为内部组件,提供了高级的功能。
     
    生产者创建消息,也被称为发布者和写入者。一般情况下,一个消息会被发布到一个特定的主题上。生产者在默认的情况下把消息均衡的分布到主题的所有分区上,而并不关心特定消息会被写到那个分区。
     
    消费者读取消息,也被称为订阅者或读者。消费者订阅一个或多个主题,并按照消息生成的顺序来读取他们。消费者通过检查消息的偏移量来判断是否读过消息。偏移量是另一种原数据,它是一个不断递增的整数值,在创建消息试,kafka会把它添加到消息里。消费者是消费群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。群组保证每个分区只能被一个消费者使用。
     
    每一kafka服务称为broker,基于以下几种原因,最好使用多集群。
    1.数据类型分离
    2.安全需求隔离
    3.多数据中心(灾难恢复)
     
    注意:kafak的消息复制机制只能在单个集群里进行,不能再多个集群之间进行。但是提供了一个叫做mirrorMaker的工具复制集群之间的数据。
     

    kafak的优点?

    1.多个生产者,不管客户端在使用单个主题还是多个主题。都是以统一的格式对外提供数据。
    2.多个消费者,kakfa支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响。多个消费者可以组成一个群组,他们共享一个消息流,并保证整个群组对每个给定的消息只处理一次。
    3.基于磁盘的数据存储,对于单节点或者处理数据慢再或者高峰导致无法及时读取数据,因为kafka对数据进行了持久化。
    4.伸缩性,在开发阶段可以使用一个broker,生产情况可以使用集群模式,而且这种扩展是水平扩展,根据业务需求。
    5.高性能。
    6.数据生态系统。
     
     

    kafka使用场景

     
    1.活动跟踪,kafak最初受用场景是跟踪用户的活动。网站用户与前端交互之后,前端程序生产用户相关的信息,这些信息就被发布到一个或多个主题上。就这样生产报告。
    2.传递消息,将消息发送给应用程序或者其他组件(比如邮件)。
    3.度量指标和日志记录,把这些发送到kafka的主题上。
    4.提交日志
    5.流处理
     

    kafka依赖的环境

    java,zookeeper(来保存broker元数据信息)
     

    kafka的broker配置信息

    1.broken.id 每个broken唯一标识,默认值是0,这个值在kafka集群是唯一的。
    2.port kafka端口
    3.zookeeper.connect 用于保存broker元数据的zookeeperd地址是通过zookeeper.connect来指定的。
    4.log.dir kafka把所有消息都保存在磁盘上,存放这些日志片段是通过log.dir指定的。
    5.num.recovery.threads.per.data.dir 每个日志片段使用线程的数量。 对于以下3种情况,kafka会只用可配置的线程池来处理日志片段:
      (1).服务器正常启动,用于打开每个分区的日志片段。
      (2).服务器崩溃后重启,用于检查和截短每个分区的日志片段。
      (3).服务正常关闭,用于关闭日志片段。
    6.auto.create.topics.enable 默认情况下,kafka会在如下几种情况创建主题:
      (1)当一个生产者开始往主题写入消息时。
      (2)当一个消费者开始从主题读取消息时。
      (3)当任意一个客户端向主题发送元数据请求时。
    7.num.partitions 指定主题包含多少个分区,如果自定义可以自己创建主题的时候指定。
    8.log.retention.ms 决定数据保存多久,默认168小时也就是一周。
    9.log.retention.bates 指定最多可以保存多大。
    10.log.segment.bytes 这个作用于日志片段上(消息到达broker时,是被追加到日志片段上),表示日志片段上限多大,如果达到就新开一个分区日志片段。
    11.log.segment.ms 指定日志片段多吃时间后被关闭。
    12.message.max.bytes 限制消息的大小,如果超过,broker报错。
  • 相关阅读:
    详细对比9门主流编程语言
    ZT在谷歌上班感受如何?
    林锐:5 C++/C程序的基本概念
    林锐书:写一个hello world by seasoned professional
    C 中重载一词中的“重”字读ZHONG4还是CHONG2?
    ZT C++ 重载、覆盖和隐藏的区别
    安全模式 冷启动
    Wi-Fi
    再谈男性饮食保健
    fstat、stat和lstat 区别(转)
  • 原文地址:https://www.cnblogs.com/Seeasunnyday/p/9227084.html
Copyright © 2011-2022 走看看