KAFKA安装+配置详解+常用操作+监控

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KAFKA安装+配置详解+常用操作+监控相关的知识,希望对你有一定的参考价值。

一、kafka理论


 1、kafka是神马?

    kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。


2、kafka的设计方案

消息持久化及其缓存

    磁盘性能:在传统的磁盘写入很慢,因为它使用随机写入 50k/s(6个7200转的sata硬盘组成的raid-5),但是线性写入速度有300ms/s的速度,所以kafka利用线性写入的方式。

    线性写入:将数据调用操作系统文件接口写到文件系统里面去这样就缓存到操作系统的页面缓存中,然后传统意思来说将其flush一下到磁盘中,但是kafka并没有这样,而是保存在页面缓存中(相当于放在内存当中)并没有进行flush操作,这样他就会提供比较高的读的性能,下次读就从内核页面缓存中读数据,但是内存中存储数量不是无限大的,所以我们配置参数(每当接收到N条信息或者每过M秒),进行一个flush操作,从而可以为系统硬件崩溃时“处于危险之中”的数据在量上加个上限。

    kafka的缓存不是在内存中保存尽可能多的数据并在需要时将这些数刷新到文件系统,而是做完全相反的事情,将所有的数据立即写入文件系统中的持久化的日志中,但不进行刷刷新数据的调用,实际这么做意味着数据被传输到os内核的页面缓存中去了,随后在根据配置刷新到硬盘。


持久化常量时间

    以往的消息系统元数据的持久化数据结构往往采用BTree。BTree是目前最常用额数据结构,在消息系统中它可以用来广泛支持多种不同的事物性活非事务性的语义,他的确带来了一个非常高的处理开销,Btree的运算时间的复杂度为0(LOG n),Btree需要一种非常负责的页面级或者行级锁才能避免在每次操作时锁定整颗树。实现这种机器就要为行级锁定付出非常昂贵的代价,负责就必须所有的读取操作进行串行化(serialize).因为对磁盘寻道操作的高度依赖,就不太可能高效的从驱动器密码的提高中获得改善,因而就不得不使用容量较小(<100GB)转速较快的sas驱动,以维持一种比较合理的数据与寻道容量之比。kafka的设计是什么样的呢?kafka利用按照通常的日志解决方案的样子构建,只是简单的文件读取和简单地向文件中追加内容。当然相比的劣势在于不支持Btree这样事物和非事物的语义支持,但是优势在于其所有的操作夫妻度都是0(1),读取操作并不需要阻止写入操作,而且反之亦然。这样做显然有性能优势,因为性能完全同数据大小之间脱离了关系。能够存取到几乎无限大的磁盘空间而无须付出性能代价,意味着,我们可以提供其他消息系统并不常见的功能,例如在kafka中,消息在使用完全后并没有立即删除,而是会将这些消息保存相当长一段时间,这样可以利用offset功能进行多次消费,比如说 可以设置从某个offset id往下进行消费,当然一般只有是消费失败才回这么做。


效率最大化

    传统的消息发送:

        a、操作系统将数据从磁盘中读取到内核空间里的页面缓存。

        b、应用程序将数据从内核空间读入到用户空间的缓冲区。

        c、应用程序将读到的数据写会内核空间并放入socket的缓冲区

        d、操作系统将数据从socket的缓冲区拷贝到NIC(网络接口卡,即网卡)的缓冲区,自此数据才能通过网络发送出去。

        这样效率显然很低,因为里面涉及到4此拷贝,2次系统调用。


    kafka的信息发送是如何的呢?

        kafka使用sendfile(0拷贝)就可以避免这些重复的拷贝操作,让os直接将数据从页面缓存发送到网络中,其中只需最后一步中的将数据拷贝到NIC的缓冲区。

        kafka采用全文所属的sendfile拷贝优化方案,数据只需要拷贝到页面缓存中一次,然后每次发送给使用者时都对他重复使用即可,一次拷贝发给多个消费者。


端到端的批量压缩

    在传输的过程中,传输前压缩,到目标后在解压缩。


二、kafka安装


1、jdk安装

wget -c http://118.186.220.66:8002/jdk-7u51-linux-x64.gz 
mkdir -p /usr/local/java
tar zxf jdk-7u51-linux-x64.gz -C /usr/local/java
ln -s /usr/local/java/jdk1.7.0_51/bin/java /usr/bin/java
ln -s /usr/local/java/jdk1.7.0_51/bin/javac /usr/bin/javac
ln -s /usr/local/java/jdk1.7.0_51/bin/javadoc /usr/bin/javadoc
ln -s /usr/local/java/jdk1.7.0_51/bin/javaws /usr/bin/javaws

# tail -3 ~/.bash_profile
export JAVA_HOME=/usr/local/java/jdk1.7.0_51
export PATH=$PATH:$JAVA_HOME/bin
exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

java -version

    


本文出自 “欺壹世De博客” 博客,请务必保留此出处http://qiyishi.blog.51cto.com/5731577/1857545

以上是关于KAFKA安装+配置详解+常用操作+监控的主要内容,如果未能解决你的问题,请参考以下文章

KAFKA安装+配置详解+常用操作+监控

kafka_2.11-2.0.0_安装部署

学习笔记Kafka—— Kafka安装配置—— Kafka多代理配置及常用操作

学习笔记Kafka—— Kafka安装配置—— Kafka多代理配置及常用操作

学习笔记Kafka—— Kafka安装配置—— Kafka单代理及常用操作

学习笔记Kafka—— Kafka安装配置—— Kafka单代理及常用操作