Kafka集群安装

作者: 云计算机网 分类: 云计算知识 发布时间: 2016-04-27 23:46
安装Kafka集群

假设我们有集群中,需要配置4个broker,形成下面图表的Kafka集群。



2.1 配置文件

配置所有的Kafka的Producer文件,其中,brokerpid的值是独一无二的数字值。几个核心属性如下:

<span style="font-size:18px;"># The id of the broker.This must be set to a unique integer for each broker.broker.id=11# The port the socketserver listens onport=9092# Hostname the broker willbind to. If not set, the server will bind to all interfaceshost.name=hadoop-master#zookeeper 集群 zookeeper.connect=machine-1:2222,machine-2:2222,machine-0:2222</span>


由于Kafka依赖于Zookeeper集群,所以,必须先启动Zookeeper集群。这里不作具体介绍。

2.2 broker属性配置

在机器machine-0和Hadoop-master,配置好对应broker配置文件,两个机器上的配置属性相同。

Hadoop-master 上,Kafka的server.properties配置:

<span style="font-size:18px;"># The id of the broker.This must be set to a unique integer for each broker.broker.id=11 #############################Socket Server Settings ############################# # The port the socketserver listens onport=9092 # Hostname the broker willbind to. If not set, the server will bind to all interfaceshost.name=hadoop-master # Hostname the broker willadvertise to producers and consumers. If not set, it uses the# value for"host.name" if configured. Otherwise, it will use the value returned from#java.net.InetAddress.getCanonicalHostName().#advertised.host.name=<hostnameroutable by clients> # The port to publish toZooKeeper for clients to use. If this is not set,# it will publish the sameport that the broker binds to.#advertised.port=<portaccessible by clients> # The number of threadshandling network requestsnum.network.threads=3 # The number of threadsdoing disk I/Onum.io.threads=8 # The send buffer(SO_SNDBUF) used by the socket serversocket.send.buffer.bytes=1048576 # The receive buffer(SO_RCVBUF) used by the socket serversocket.receive.buffer.bytes=1048576 # The maximum size of arequest that the socket server will accept (protection against OOM)socket.request.max.bytes=104857600  #############################Log Basics ############################# # A comma seperated list ofdirectories under which to store log fileslog.dirs=/opt/kafka/logs # The default number of logpartitions per topic. More partitions allow greater# parallelism forconsumption, but this will also result in more files across# the brokers.num.partitions=3 #############################Log Flush Policy ############################# # Messages are immediatelywritten to the filesystem but by default we only fsync() to sync# the OS cache lazily. Thefollowing configurations control the flush of data to disk.# There are a few importanttrade-offs here:#    1. Durability: Unflushed data may be lostif you are not using replication.#    2. Latency: Very large flush intervals maylead to latency spikes when the flush does occur as there will be a lot of datato flush.#    3. Throughput: The flush is generally themost expensive operation, and a small flush interval may lead to exceessiveseeks.# The settings below allowone to configure the flush policy to flush data after a period of time or# every N messages (orboth). This can be done globally and overridden on a per-topic basis. # The number of messages toaccept before forcing a flush of data to disk#log.flush.interval.messages=10000 # The maximum amount oftime a message can sit in a log before we force a flush#log.flush.interval.ms=1000 #############################Log Retention Policy ############################# # The followingconfigurations control the disposal of log segments. The policy can# be set to delete segmentsafter a period of time, or after a given size has accumulated.# A segment will be deletedwhenever *either* of these criteria are met. Deletion always happens# from the end of the log. # The minimum age of a logfile to be eligible for deletionlog.retention.hours=168 # A size-based retentionpolicy for logs. Segments are pruned from the log as long as the remaining# segments don't drop belowlog.retention.bytes.#log.retention.bytes=1073741824 # The maximum size of a logsegment file. When this size is reached a new log segment will be created.log.segment.bytes=536870912 # The interval at which logsegments are checked to see if they can be deleted according# to the retention policieslog.retention.check.interval.ms=60000 # By default the logcleaner is disabled and the log retention policy will default to just deletesegments after their retention expires.# Iflog.cleaner.enable=true is set the cleaner will be enabled and individual logscan then be marked for log compaction.log.cleaner.enable=false #############################Zookeeper ############################# # Zookeeper connectionstring (see zookeeper docs for details).# This is a comma separatedhost:port pairs, each corresponding to a zk# server. e.g."127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".# You can also append anoptional chroot string to the urls to specify the# root directory for allkafka znodes.zookeeper.connect=machine-1:2222,machine-2:2222,machine-0:2222#server.1=machine-0:2888:3888#server.2=machine-1:2888:3888#server.3=machine-2:2888:3888 # Timeout in ms forconnecting to zookeeperzookeeper.connection.timeout.ms=1000000 </span> 
  • 看最近cnbeta的评论,有一位仁兄矢志不渝的重复“世界上最差的系统就是linux,双击不能安装软件”,而对于该评论的观点众多,但是真正正确的确极少。

    综合来看,广大cber尤其是喜欢评论的cber对Linux理解的还比较少,而且很多都是跟Windows做比较(当然这里我承认高手也大有人在),所以我想在这里有必要说一下为什么Linux到现在也不能做到双击安装软件。

      首先要说一下,很多Linux的发行版例如Ubuntu或者CentOS、Fedora等,已经早就可以双击安装自己发行版的安装包了,例如deb、rpm等。

      那么为什么现在大部分软件还是需要下载一个tar.gz后./configure/make/make install繁琐的命令安装呢?

      其实,Linux下跟Windows的软件发布有一个最大的不同就是Linux下大部分软件都是开源的,只提供源码下载,不提供编译好的二进制下载。

    所以,上面的三个命令实际上是编译一个软件,然后拷贝到系统对应目录,准确来说不是安装。

      但是为什么非要这三个命令,而不是双击之后自动执行上述三个命令呢?

      主要还是跨平台和定制化的考虑。

    我们知道Linux发行版众多,Linux支持的平台也很多,从使用最多的x86到arm,solaris等,所以这个./configure脚本可以支持很多编译参数,从而让软件支持几乎所有的硬件平台。

      而Windows下,由于几乎所有软件都是编译好的二进制打包发布,所以软件要么是32位版本,要么是64位版本不能通用的。

    好在Windows目前只支持x86和x64两个硬件平台,假若以后Windows支持其他平台,那么我们日常软件的版本区分就要更多了。

    而Linux下只要发布一个源码包,你用户是什么硬件平台自己编译好了。

      另外稍微学过软件工程的都知道,软件开发都是模块化的,通过./configure命令加上合理参数,可以不编译不需要的模块,比如最常用的php,自带几十个模块,通常我们需要哪个编译哪个好了。

      有人可能说Windows安装软件也能选择性安装,我可以不安装我不需要的模块。

      其实,Windows就算你不安装你选择的模块,那也只是这个模块不安装。

    而主程序的模块访问是编译好的,他只不过能自动判断这个模块不存在就不加载罢了。

      另外,Linux很多模块是通用的,这就是依赖关系,举例来说要用php的iconv功能,就需要系统安装libiconv库,而不同的电脑的libiconv库安装路径不同,所以需要通过./configure的参数指定你电脑的libiconv安装路径是多少,php才能顺利编译通过。#p#分页标题#e#

    Windows则是必须在C:WindowsSystem32下,可定制化太差了。

      再说一下make命令。

    make命令就是根据刚才./configure的配置参数,来把源码编译成二进制文件,放到当前目录,而不是复制到系统目录。

    为什么不能把make和make install放在一起呢?

      因为有些时候,我们只需要一个软件包里面的某个动态链接库,而不是整个程序。

    比如我们经常需要lighttpd中的spawn-fcgi,所以我们不必安装lighttpd,而是直接编译完,得到其中的spawn-fcgi即可。

      最后,make install就是把编译好的二进制文件和链接库、配置文件等复制到系统的各个目录即可,安装完成。

      说道这里,可能有些网友根本没看上面文字,就说:普通用户不需要知道这么多,他们就需要知道怎么用就行了。

    是的,话说回来了,这些人如果不用Windows,完全可以尝试Ubuntu或者Fedora,这两个发行版都可以双击安装程序。

    但是缺点就是无法深度定制。

      我们畅想一下,如果QQ有tar.gz源码版发布,那么我希望的安装命令是:

      cd qq2012-beta2/ ./configure --without-ad --without-qqshow --without-popnews --without-qzone --with-ipaddress --with-showip make;make install

    (责任编辑:admin)

  • 相关推荐:

  • 为什么Linux到现在还不能
  • 临夏县教育局2019年临夏
  • 物探领域新突破,曙光斩
  • Windows7iis配置办法window
  • 迅雷下载提示未安装迅雷
  • Mac系统怎么安装驱动精灵
  • photoshop字体安装方法
  • 迅雷2018beta苹果版怎么下
  • 系统之家一键安装系统
  • win10系统补丁kb3081424安装
  • 网站内容禁止违规转载,转载授权联系中国云计算网