zoukankan      html  css  js  c++  java
  • Kafka介绍

    kafka介绍:

    作用:

    • 系统之间解耦和
    • 峰值压力缓冲
    • 异步通信

    特点:生产者消费者模式,先进先出(FIFO)保证顺序,自己不丢数据,默认每隔7天清理数据,高吞吐量,没有主从关系,依靠Zk协调

    结构:

    • topic:消息队列/分类

      kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition(自己指定),这个是为了做并行的,在每个partition内部消息强有序,相当于有序的队列,其中每个消息都有个序号offset,比如0到12,从前面读往后面写。一个partition对应一个broker,一个broker可以管多个partition,比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。这个partition可以很简单想象为一个文件位置信息叫offset,当数据发过来的时候它就往这个partition上面append,追加就行,消息不经过内存缓冲,直接写入磁盘(零拷贝技术),kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有一个消费完这么个概念,只有过期这样一个概念。

      producer自己决定往哪个partition里面去写,这里有一些的策略,譬如如果hash(默认算法是 hash 取 %),或者是轮询的负载均衡,不用多个partition之间去join数据了。consumer自己维护消费到哪个offset,每个consumer都有对应的group,group内是queue消费模型(各个consumer消费不同的partition,因此一个消息在group内只消费一次),group间是publish-subscribe消费模型,各个group各自独立消费,互不影响,因此一个消息在被每个group消费一次

    分区的意义:

    1.kafka为什么要在topic里加入分区的概念?

      producer只需要关心消息发往哪个topic,而consumer只关心自己订阅哪个topic,并不关心每条消息存于整个集群的哪个broker。  为了性能考虑,如果topic内的消息只存于一个broker,那这个broker会成为瓶颈,无法做到水平扩展。若没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。

      可靠性的原因之一:Kafka会给每个分区找一个节点当带头大哥(Leader),以及若干个节点当随从(Follower)。消息写入分区时,带头大哥除了自己复制一份外还会复制到多个随从。如果随从挂了,Kafka会再找一个随从从带头大哥那里同步历史消息;如果带头大哥挂了,随从中会选举出新一任的带头大哥,继续笑傲江湖。

    2.kafka消息存储和生产者模型

    环境搭建:

      非常简单

    1. 解压压缩包
    2. 配置../ kafka_2.10-0.8.2.2/config/server.properties文件

        三个地方需要配置,broker.id、log.dirs、zookeeper.connect

        broker.id:必须是整数

        log.dirs:真实数据存储的地方

        zookeeper.connect:zk的地址

      3.启动

      bin/kafka-server-start.sh   config/server.properties

       4.一些命令

      

        创建Topic:
        kafka-topics.sh --create --zookeeper hadoop:2181 --replication-factor 1 --partitions 1 --topic test
    
        查看创建的Topic:
        kafka-topics.sh --list --zookeeper hadoop:2181
        
        启动生产者脚本:
        kafka-console-producer.sh --broker-list hadoop:9092 --topic test
        
        启动消费者脚本:
        kafka-console-consumer.sh --zookeeper hadoop:2181 --topic test --from-beginning
        
        --from-beginning的使用:从头开始消费

      查看topic详细信息
        kafka-topics.sh --describe --zookeeper hadoop:2181 --topic test

      

        

       

    我不喜欢这个世界,我喜欢你
  • 相关阅读:
    我从来没有想要去
    微信公众号开发系列-发展模式,创建自己的自定义菜单
    iOS6之后 NSAttributedString 福利
    iOS 面试题:OC标题的基本概念<延续>
    逻辑、认识论和本体论“三统一”
    C++中的头文件和源文件
    extern与头文件(*.h)的区别和联系
    Predicate Format String Syntax 与字面量
    编码、格式与网络通信
    充分条件和必要条件的联系和区别是什么
  • 原文地址:https://www.cnblogs.com/truekai/p/11774847.html
Copyright © 2011-2022 走看看