• kafka介绍


    kakfa:

    1.简介

    1.定义:
    kafka是一个分布式、支持分区(paritition)、多副本的,基于zookeeper协调的分布式消息系统
    
    2.能做什么
    可以实时的处理大量数据,满足各种场景需求。hadoop批处理,spark/storm流式处理等
    
    3.kafka的特性:
    3.1 高吞吐、低延迟
        kafka每秒可以处理几十万的消息,延迟最低只有几毫秒
        每个topic可以分多个partition,consumer group对partition进行consume操作
    3.2 可扩展性
        kafka集群支持热扩展
    3.3 持久性、可靠性
        消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
    3.4 容错性
        允许集群中节点失败(如果副本数n,允许n-1个节点失败)
    3.5 高并发
        支持数千个客户端同时读写
    
    4.使用场景
    4.1 日志收集
    4.2 消息系统
    4.3 流式处理    
    
    5.流程
    producers 往brokers里面的指定topic写消息
    consumer  从brokers里面拉取指定topic的消息进行业务处理
    ** kakfa.apache.org
    ** Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。
    
    重要名词:
    Producer(生产者)
    消息产生者,产生消息,将其发送到Broker;
    
    Consumer(消费者)
    使用数据的客户端,从Broker得到消息;
    
    Broker(中间人,消息中转站)
    即kafka的Server;集群(cluster)由一堆Broker组成
    
    Zookeeper
    管理连接信息,包括各个节点的IP,端口等;Producer和Consumer需要到Zookeeper请求Broker的信息,从而进行消息的收发;
    一个新的Broker的启动也需要到Zookeeper注册; zookeeper也可以配集群。目的是防止某一台挂了。
    producer和consumer通过zookeeper去发现topic,并且通过zookeeper来协调生产和消费的过程。
    
    Topic
    Topic,是kafka对消息分类的依据;一条消息,必须有一个与之对应的Topic;
    比如现在又两个Topic,分别是Love和Hate,Producer向Love发送一个消息苹果,然后向Hate发送一个消息土豆;那么,
    订阅Love的Consumer就会收到消息苹果,订阅Hate的Consumer就会收到消息土豆;
    每个Consumer可以同时订阅多个Topic,也即是说,同时订阅Love和Hate的Consumer可以同时收到苹果和土豆。
    
    Message
    Message就是我们所说的消息,是KAfKA操作的对象,消息是按照Topic存储的;
    KAFKA中按照一定的期限保存着所有发布过的Message,不管这些Message是否被消费过。kafka默认存储7天。

    2.安装

    kafka_2.10-0.8.2.1
        ** 2.10是scala的版本,kafka是用Scala开发的,scale的安装版本应该对应
        ** 0.8.2.1是kafka的版本
    
    1、安装jdk和zookeeper,并启动
        $ sbin/zkServer.sh start    --启动
        $ sbin/zkServer.sh status   --查看状态,也可jps查看
        
    2、安装scala
        [tom@blue01 cdh]$ tar zxvf /opt/softwares/scala-2.10.4.tgz
        $ su - 
        # vi /etc/profile        
        #SCALA_HOME
        SCALA_HOME=/opt/modules/cdh/scala-2.10.4
        export PATH=$PATH:$SCALA_HOME/bin
        $ scala -version
    
    3、安装kafka
        $ tar zxvf /opt/softwares/kafka_2.10-0.8.2.1.tgz
    
    4、修改配置文件
    a)
    server.properties:
    # 消息中转站,每个broker id必需唯一
    broker.id=0
    port=9092
    # 主机名,去掉注解
    host.name=blue01.mydomain
    # kafka存储数据的目录,并非存放日志的目录,$ mkdir data
    log.dirs=/opt/modules/cdh/kafka_2.10-0.8.2.1/data    
    # 指定zookeeper服务器
    zookeeper.connect=blue01.mydomain:2181
    
    b)            
    producer.properties:
    # broker列表
    metadata.broker.list=blue01.mydomain:9092
    
    c)
    consumer.properties:
    zookeeper.connect=blue01.mydomain:2181
    
    5、启动kafka
    bin/kafka-server-start.sh config/server.properties
    
    
    kafka初次使用:
    1、创建一个topic
    # 副本因子通常是奇数,不大于集群服务器台数
    # 分区数不能大于集群服务器台数
    bin/kafka-topics.sh --create --zookeeper blue01.mydomain:2181 --replication-factor 1 --partitions 1 --topic testTopic
    
    # 查看topic list
    bin/kafka-topics.sh --list --zookeeper blue01.mydomain:2181
    
    2、启动生产者
    bin/kafka-console-producer.sh --broker-list blue01.mydomain:9092 --topic testTopic
    
    3、启动消费者,再开一个窗口
    bin/kafka-console-consumer.sh --zookeeper blue01.mydomain:2181 --topic testTopic --from-beginning
    
    ** 生产者:flume、程序
    ** 消费者:spark、storm、impala

    3.kafka与flume整合

    生产者flume和kafka整合:    
    
    ** flume-collector
                    channel1[c3]    -->  HDFS[k3]
        source[r3]
                    channel2[c4]    -->     kafka[k4]
                
    1、flume-apache.conf    --不需要修改
        ** 监控apache web应用的日志文件
        
    2、flume-hive.conf      --不需要修改
        ** 监控hive日志文件
        $ sbin/start-dfs.sh ;sbin/start-yarn.sh ;mr-jobhistory-daemon.sh start historyserver
    
    3、修改flume-collector.conf   ------------
    
    # 一个源通过两个管道同时向两个目标下沉
    agent3.sources = r3
    agent3.channels = c3 c4
    agent3.sinks = k3 k4
    # 优化参数,复制
    agent3.source.r3.selector.type = replicating
    
    # define sources
    agent3.sources.r3.type = avro
    agent3.sources.r3.bind = 192.168.122.128
    agent3.sources.r3.port = 4545
    
    # define channels --> c3
    agent3.channels.c3.type = memory
    agent3.channels.c3.capacity = 1000
    agent3.channels.c3.transactionCapacity = 100
    
    # define channels --> c4
    agent3.channels.c4.type = memory
    agent3.channels.c4.capacity = 1000
    agent3.channels.c4.transactionCapacity = 100
    
    # define sinks : k4
    agent3.sinks.k4.type = org.apache.flume.sink.kafka.KafkaSink
    agent3.sinks.k4.brokerList = blue01.mydomain:9092
    agent3.sinks.k4.topic = testTopic
    
    # define sinks : k3
    #启用设置多级目录,这里按年///时 2级目录,每个小时生成一个文件夹
    agent3.sinks.k3.type = hdfs
    agent3.sinks.k3.hdfs.path=hdfs://192.168.122.128:8020/flume3/%Y%m%d/%H
    agent3.sinks.k3.hdfs.filePrefix = accesslog
    #启用按时间生成文件夹
    agent3.sinks.k3.hdfs.round=true
    #设置round单位:小时  
    agent3.sinks.k3.hdfs.roundValue=1
    agent3.sinks.k3.hdfs.roundUnit=hour
    #使用本地时间戳  
    agent3.sinks.k3.hdfs.useLocalTimeStamp=true
    
    agent3.sinks.k3.hdfs.batchSize=1000
    agent3.sinks.k3.hdfs.fileType=DataStream
    agent3.sinks.k3.hdfs.writeFormat=Text
    
    #设置解决文件过多过小问题
    #每600秒生成一个文件
    agent3.sinks.k3.hdfs.rollInterval=600
    #当达到128000000bytes时,创建新文件 127*1024*1024
    #实际环境中如果按照128M回顾文件,那么这里设置一般设置成127M
    agent3.sinks.k3.hdfs.rollSize=128000000
    #设置文件的生成不和events数相关
    agent3.sinks.k3.hdfs.rollCount=0
    #设置成1,否则当有副本复制时就重新生成文件,上面三条则没有效果
    agent3.sinks.k3.hdfs.minBlockReplicas=1
    
    # bind the sources and sinks to the channels
    agent3.sources.r3.channels = c3 c4
    agent3.sinks.k3.channel = c3
    agent3.sinks.k4.channel = c4
    
    ------------------
    
    测试:(接下来的操作要打开一堆窗口)
    1、刷新网页
        $ su -
        # service httpd start
        $ su - tom
        $ tail -F /var/log/httpd/access_log
        $ bin/flume-ng agent --conf conf/ --name agent1 --conf-file conf/flume-apache.conf
        
    2、启动CDH Hadoop,启动hive
        $ tail -F /opt/modules/cdh/hive-0.13.1-cdh5.3.6/logs/hive.log
        > show databases;
        $ bin/flume-ng agent --conf conf/ --name agent2 --conf-file conf/flume-hive.conf
        
    3、启动agent3:
        $ bin/flume-ng agent --conf conf/ --name agent3 --conf-file conf/flume-collector.conf
        进入CDH Hadoop,监控日志变化,注意:路径要修改(监控.temp文件效果会明显点)
        $ bin/hdfs dfs -tail -f /flume3/20161226/11/accesslog.1482724356118.tmp
        
    4、启动zookeeper
        $ sbin/zkServer.sh start
       启动kafka
        $ bin/kafka-server-start.sh config/server.properties
       启动kafka--消费者:
        $ bin/kafka-console-consumer.sh --zookeeper blue01.mydomain:2181 --topic testTopic --from-beginning
    
    PS:
    ** 查看之前执行过的命令
    $ history | grep flume

     

  • 相关阅读:
    POJ2407:Relatives(欧拉函数) java程序员
    POJ1664:放苹果(搜索) java程序员
    关于android中数据库的创建以及基础的增删改查的相应操作
    家庭版记账本app开发进度。开发到现在整个app只剩下关于图表的设计了,具体功能如下
    在tap的碎片上与活动进行绑定实现点击事件(日期时间选择以及按钮跳转时间)
    使用tap、Fragment等相关相关知识点。实现类似微信的界面
    android学习相关intent和fragment的先关知识点
    家庭记账本app进度之关于tap的相关操作1
    家庭版记账本app进度之关于listview显示账单,并为其添加点击事件
    家庭版记账本app进度之编辑框组件
  • 原文地址:https://www.cnblogs.com/yin-fei/p/10778682.html
Copyright © 2020-2023  润新知