kafka的介绍和安装配置

Apache Kafka是分布式发布-订阅消息系统,是一个消息中间件框架,

是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。

基本框架:

    它的架构包括以下组件:

1、话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名;

2、生产者(Producer):是能够发布消息到话题的任何对象;

3、服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群;

4、消费者(Consumer):可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息;

5、 Zookeeper : Kafka使用zookeeper作为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一起

介绍一下这四者的关系:

   1. Producer 如果生产了数据,会先通过 zookeeper 找到 broker,然后将数据存放到 broker

   2. Consumer 如果要消费数据,会先通过 zookeeper 找对应的 broker,然后消费。

    首先生产者向zookeeper注册一个话题(topic),zookeeper检查无误的话会发布这个话题(topic)给broker,然后生产者将数据推送到broker上的这个话题,消费者想要获取这个话题的数据的话需要先找到zookeeper 获取授权得到这个话题,然后向broker拉取数据,这样就完成了一个简单的推送与订阅过程.zookeeper类似于hdfs里面的namenode负责管理元数据不负责存储,broker负责存储数据

    其中producer 到 broker 的过程是 : producer将数据主动推送到 broker

    而consumer 到 broker 的过程是 :是通过 consumer 主动向broker拉取数据的,而不是 broker 把数据主动发送到 consumer 端的

kafka的特性:

    (1)高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;

    (2)可扩展性:kafka集群支持热扩展;

    (3)持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;

    (4)容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);

    (5)高并发:支持数千个客户端同时读写;

    (6)支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;

关于Partition:

    分区,或者说分组。分组是Kafka提升吞吐量的一个关键设计。这样可以让消费者多线程并行接收消息。创建Topic时可指定Parition数量。一个Topic可以分为多个Partition,也可以只有一个Partition。每一个Partition是一个有序的,不可变的消息序列。每一个消息在各自的Partition中有唯一的ID。这些ID是有序的。称之为offset,offset在不同的Partition中是可以重复的,但是在一个Partition中是不可能重复的。越大的offset的消息是最新的。Kafka只保证在每个Partition中的消息是有序的,就会带来一个问题,即如果一个Consumer在不同的Partition中获取消息,那么消息的顺序也许是和Producer发送到Kafka中的消息的顺序是不一致的。这个在后续会讨论。

安装配置:

下载: https://kafka.apache.org/downloads

解压:

tar -zxvf kafka_2.11-1.1.0.tgz 

进入kafka的config文件夹

1. 配置Zookeeper :

    在这里我们找到zookeeper.properties文件并将它拷贝一份:

下面俩种方法都可以,当然你也可以直接使用zookeeper.properties文件,但是我们为了保留默认文件所以就拷贝了一份

cat zookeeper.properties | grep -v [#*] >> zk.properties 
cp zookeeper.properties zk.properties 

接下来我们修改文件里面的dataDir,这个是将来zookeeper的信息的存储位置,你自己指定位置

例如:

dataDir=/home/hadoop/opt/kafka_2.11-1.1.0/zk_tmp
2. 配置broker

         找到server.properties文件,同样的方法拷贝一份

cat server.properties | grep -v [#*] >> bk.properties

向里面加入一行:

# listeners=PLAINTEXT://:9092
这个指的是端口号为9092 ,这也是默认的端口,当然你也可以修改


注:这里配置broker的时候,每台机器上的broker保证唯一,从0开始。如:在另外2台机器上分别配置broker.id=1,broker.id=2,此时我配置的为单机模式


启动zookeeper

        在kafka的目录下面输入下面命令


./bin/zookeeper-server-start.sh config/zk.properties

启动成功后复制一个渠道jps会发现QuorumPeerMain,它就是zookeeper的进程


启动kafka server


./bin/kafka-server-start.sh config/bk.properties
启动成功后复制一个渠道jps会发现Kafka,它就是broker的进程

create a topic

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

    --topic test 值的是创建了一个名为test的话题

查看topic

./bin/kafka-topics.sh --list --zookeeper localhost:2181
    可以查看所有的话题topic

启动生产者

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

      生产数据.比如 : hello word

    

启动消费者

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

    此时你就会看到之前产生的数据hello word ,当然现在生产者可以继续产生数据,消费者可以继续拉取数据

    如果你不想看之前的数据,你可以输入

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
    --from-beginning 表示从开头开始看,其实它可以从任意一个偏移量开始看


flume连接kafka

    监控文件夹

1. 首先修改flume的配置文件sink的参数

c1.sinks.log1.type = org.apache.flume.sink.kafka.KafkaSink    # 类型为kafka
c1.sinks.log1.kafka.topic = test                              # 话题为 test
c1.sinks.log1.kafka.bootstrap.servers = localhost:9092        # 地址,端口


2. 保存启动flume

        在flume目录下,输入下面代码

./bin/flume-ng agent -c ./conf -f ./conf/c1.conf -n c1 -Dflume.root.logger=INFO,console

3. 启动消费者

        在kafka目录下,输入下面代码

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

4. 测试:

    因为上面的flume为一个监控文件夹,所以我创建一个文件student.csv:


  然后将这个文件移动到我监控的文件夹里面,在消费者窗口就看到了下图,所以我们的flume和kafka连接成功





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值