您好,欢迎访问三七文档
大数据组件-KAFKA技术分享1.KAFKA介绍.................................................................................................................................11.1背景..............................................................................................11.2组件...................................................................................................................................21.3特性...................................................................................................................................52.设计思想理念.............................................................................................................................63.配置集群.....................................................................................................................................84.开发应用...................................................................................................................................105.性能优化...................................................................................................................................136.监控...........................................................................................................................................141.下载KafkaWebConsole.................................................................................................142.安装sbt...............................................................................................................................143.配置KafkaWebConsole.................................................................................................144.配置mysql的jdbc驱动....................................................................................................155.执行sql语句(如下绿色选框所示)....................................................................................156.编译.....................................................................................................................................157.运行.....................................................................................................................................158.浏览访问.............................................................................................................................167.常见问题摘要...........................................................................................................................168.参数设置表...............................................................................................................................179.待续...........................................................................................................................................271.KAFKA介绍Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、ApacheStorm、Spark都支持与Kafka集成。1.1背景当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战:如何收集这些巨大的信息如何分析它如何及时做到如上两点以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要一个沟通两者的桥梁-消息系统。从一个微观层面来说,这种需求也可理解为不同的系统之间如何传递消息。1.2组件Topic:12消息存放的目录即主题。消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些PartitionLogs(分区日志)组成Producer:消息生产者,就是向kafkabroker发消息的客户端。Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。producer端,可以将消息buffer起来,当消息的条数达到一定阀值时,批量发送给broker。小数据IO太多,会拖慢整体的网络延迟,批量延迟发送事实上提升了网络效率。不过这也有一定的隐患,比如说当producer失效时,那些尚未发送的消息将会丢失。producer将会和Topic下所有partitionleader保持socket连接;消息由producer直接通过socket发送到broker,中间不会经过任何路由层.事实上,消息被路由到哪个partition上,由producer客户端决定。partitionleader的位置(host:port)注册在zookeeper中,producer作为zookeeperclient,已经注册了watch用来监听partitionleader的变更事件。Consumer:21消息消费者,向kafkabroker取消息的客户端.consumer端向broker发送fetch请求,并告知其获取消息的offset;此后consumer将会获得一定条数的消息;consumer端也可以重置offset来重新消费消息。每个consumer属于一个consumergroup;反过来说,每个group中可以有多个consumer.发送到Topic的消息,只会被订阅此Topic的每个group中的一个consumer消费.如果所有的consumer都具有相同的group,这种情况和queue模式很像;消息将会在consumers之间负载均衡.如果所有的consumer都具有不同的group,那这就是发布-订阅;消息将会广播给所有的消费者.kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息.同样,Consumer可以批量fetch多条消息。消息量的大小可以通过配置文件来指定.在kafka中,一个partition中的消息只会被group中的一个consumer消费;每个group中consumer消息消费互相独立;我们可以认为一个group是一个订阅者,一个Topic中的每个partions,只会被一个订阅者中的一个consumer消费,不过一个consumer可以消费多个partitions中的消息.kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的.事实上,从Topic角度来说,消息仍不是有序的.Message:一个消息单位Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。ConsumerGroup(CG):q这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。一个Topic的多个partitions,被分布在kafka集群中的多个server上;每个server(kafka实例)负责partitions中消息的读写操作;此外kafka还可以配置partitions需要备份的个数(replicas),每个partition将会被备份到多台机器上,以提高可用性.replicated基于replicated方案,那么就意味着需要对多个备份进行调度;每个partition都有一个server为leader;leader负责所有的读写操作,如果leader失效,那么将会有其他follower来接管(成为新的leader);follower只是单调的和leader跟进,同步消息即可..由此可见作为leader的serve
本文标题:kafka技术分享
链接地址:https://www.777doc.com/doc-2882690 .html