Kafka开发笔记

来源:互联网 发布:知乎怎么同步关注 编辑:程序博客网 时间:2024/05/14 19:15

Kafka简介:

Kafka 是分布式发布-订阅消息系统。它最初由 LinkedIn 公司开发,使用 Scala语言编写,之后成为 Apache 项目的一部分。Kafka提供分布式的、可划分的、多订阅者、冗余备份、持久性的日志服务。它主要用于处理活跃的流式数据

Kafka的特点:

同时为发布和订阅提供高吞吐量。据了解,Kafka 每秒可以生产约 25 万条消息(50 MB),每秒处理 55 万条消息(110 MB)。 可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如 ETL,以及实时应用程序。通过将数据持久化到硬盘以及 replication 防止数据丢失。分布式系统,易于向外扩展。所有的 producer、broker 和 consumer 都会有多个,均为分布式的。无需停机即可扩展机器。消息被处理的状态是在 consumer 端维护,而不是由 server 端维护。当失败时能自动平衡。支持 online 和 offline 的场景。

Kafka的测试结果:


Kafka的逻辑架构


Kafka的核心概念:

             Consumer: 特指消息的消费者 消息消费方。订阅topics并处理其发布的消息的过程叫做consumers,在kafka中,我们可以认为group是一个”订阅者“,一个topic中的  partition 只会被一个”订阅者“中的consumer消费,但是一个consumer可以消费多个partition中的消息,故对于一个topic中,同一个group中不能有多于partiotion个数的consumer同时消费,否则意味着某些consumer将无法得到消息.。

            Consumer Group:消费者组,可以并行消费Topic中partition的消息

             Topic :特指Kafka 处理的消息源的不同分类

             Partition:Topic 物理上的分组,一个topic可以分为多个partiotion,每个partition是个有序的队列。partition 中的每条消息都会被分配一个有序的   id(offset)。通过分 区,可以将日志内容分散到多个server上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分为任意多个   partitions,来保证消息 (保存/消费)的效率。.有效效提升并发消费的能力.

           Message:消息,是通信的基本单位,每个 producer 可以向一个 topic(主题)发布消息。Message在Broker中通过log追加的方式进行持久化存储。并进行分区。为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数(或大小)达到一定阀值时,再flush到磁盘,这样减少了磁盘IO调用的次数。 Message包含了以下三个属性:offset、MessageSize、data

             Producers:消息和数据生产者,向 Kafka 的一个 topic 发布消息的过程叫做 producers。其中生成者可以将消息发布到指定的Topic中,同时可以决定将此消息归属于  那个partition;比如基于”轮询“方式或者其它的一些算法。同时可以允许异步批量发送,先将消息缓存在内存中,然后一次批量发送出去。

             Consumers:消息和数据的消费者,订阅 topics 并处理其发布的消息的过程叫做 consumers。

             Broker: 缓存代理,Kafka集群中的一台或多台服务器统称为broker。Broker 没有副本机制,一旦broker宕机,该broker的消息将都不可用。Broker不保存订  阅  者的状态,而是由定阅者自己保存。 无 状态导致消息的删除成为难题(可能删除的消息正在被订阅),kafka采用基于时间的SLA(服务水平保证),消息保存一定 时 间(通常为7天)后会被删除。消息订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset(id)进行重新读取消费息。

            Kafka的持久化:读操作不会阻塞写操作和其他操作,数据大小不对性能产生影响;没有容量限制(相对于内存来说)的硬盘空间建立消息系统;线性访问磁盘,速度快,可以保存任意一段时间!

           Kafka的通信协议:Kafka的通讯协议中不含Schema,格式也比较简单,这样设计的好处是协议自身的Overhead小,再加上把多条Message放在一起做压缩,提高压缩比率,从而在网络上传输的数据量会少一些。          
           kafka数据传输的事务定义:消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功.通常情况下"at-least-once"是我们首选.(相比at most once而言,重复接收数据总比丢失数据要好).

Kafka安装 (最简单方式):

                 下载: http://kafka.apache.org/downloads.html
             解压:  tar -zxvf kafka_2.10-0.8.1.1.tgz

                              

             首先启动zookeeper服务 :bin/zookeeper-server-start.sh config/zookeeper.properties

                       
             启动Kafka: bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &
     

               

                         查看是否启动完毕

                             

             创建topic: 创建一个"test"的topic,一个分区一个副本bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
             查看主题:bin/kafka-topics.sh --list --zookeeper
             查看主题详情:bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
             删除主题: bin/kafka-run-class.sh kafka.admin.TopicCommand –delete --topic test --zookeeper 192.168.1.161:2181
           创建生产者 producer

               

         创建消费者 consumer :bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

               

       kafka java操作

         

  java 消费者 消费截图

       


示例Demo:点击打开链接

                 

              


       

          







1 0
原创粉丝点击