zoukankan      html  css  js  c++  java
  • Kafka学习笔记

    一.核心概念:

       

     Kafka是一个分布式消息中间件,以集群的方式运行,可以由多个服务组成,每个服务叫做一个broker

     Kafka中每条消息是由一个key,一个value和时间戳构成。

     Kafka会对其数据分区,每个分区都由一系列有序的、不可变的消息组成,这些消息被连续的追加到分区中。每个消息都有一个连续的序列号(offset),用来在分区中唯一标识。读取时的数据指针由Kafka消费者维护。

     Kafka集群在一定时间内保留所有发布的消息,不管这些消息有没有被消费,这个时间可以配置,之后消息将被丢弃。

     Kafka分区的特性保证单个服务器上保存的数据量不会太大,且提高了并发。

     Kafka为所有数据提供副本,保证了已订程度的容错。

     Leader-Follower模式: 每个分区有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。一台服务器可能同时是一个分区的leader,另一个分区的follower

     避免了所有请求只由几台服务器处理

     producer通过负载均衡或分区函数选择分区(partition)。

     Kafka在多个消费者并行消费的情况下很难保证消息的先后顺序,但如果像传统消息队列那样只用一个消费者又会降低消费速度,Kafka的分区机制保证了一个topic分区下的先后顺序,但多个跨分区先后顺序无法保证。

     同一个消费者组里消费者数量不能比partition数量更多,否则多出来的消费者只会空等待。

     消息模式:

          1.队列模式:每个消息只被其中一个consumer读到

          2.发布订阅模式:消息被广播到所有的consumer

          3.consumer group:consumers可以加入一个consumer 组,组里所有成员竞争一个topic(如果所有的consumer都在一个组中,这就成为了传统的队列模式,在各consumer中实现负载均衡。如果所有的consumer都不在不同的组中,

            这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中)

    Kafka为什么不使用内存存储消息?

       使用内存存储重启是速度太慢,Java对象占用内存太多。

       消息事务:

           1.最多一次,也可能不传

           2.最少一次,可能重复

           3.精确的一次

          Kafka允许producer灵活的指定级别。比如producer可以指定必须等待消息被提交的通知,或者完全的异步发送消息而不等待任何通知,或者仅仅等待leader声明它拿到了消息(followers没有必要),该特性通过producer端的ack属性配置

          consumer方面: 

    • consumer可以先读取消息,然后将offset写入日志文件中,然后再处理消息。这存在一种可能就是在存储offset后还没处理消息就crash了,新的consumer继续从这个offset处理,那么就会有些消息永远不会被处理,这就是上面说的“最多一次”。
    • consumer可以先读取消息,处理消息,最后记录offset,当然如果在记录offset之前就crash了,新的consumer会重复的消费一些消息,这就是上面说的“最少一次”。
    • “精确一次”可以通过将提交分为两个阶段来解决:保存了offset后提交一次,消息处理成功之后再提交一次。但是还有个更简单的做法:将消息的offset和消息被处理后的结果保存在一起。比如用Hadoop ETL处理消息时,将处理后的结果和offset同时保存在HDFS中,这样就能保证消息和offser同时被处理了。

     流处理:

        获取输入topic-》进行处理-》写入输入topic

        Kafka提供了更复杂的Stream API用于聚合计算

    参考:

       https://blog.csdn.net/tangdong3415/article/details/53432166

       http://orchome.com/

  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/showing/p/8676627.html
Copyright © 2011-2022 走看看