1. 首页
  2. kafka实践

2. kafka安装

这篇文章主要讲解kafka单机安装,以及集群安装。kafka的单机安装非常简单,只需按照下一段落提到的几步操作即可。

单机安装

  1. 下载
    首先从官方下载安装包,官方地址:http://kafka.apache.org/downloads。kafka安装包和一般安装包的命名方式不一样,我们看一个kafka包命名:kafka_2.11-1.1.0.tgz,其中2.11是scala的版本,1.1.0才是kafka的版本。官方强烈建议scala版本和服务器上的scala版本保持一致,避免引发一些不可预知的问题。官方原文如下:
    We build for multiple versions of Scala. This only matters if you are using Scala and you want a version built for the same Scala version you use. Otherwise any version should work (2.11 is recommended).
  2. 解压
    将安装包放到服务器上某个位置,执行如下命令:
  [afei@kafka opt]$ tar -xzf kafka_2.11-1.1.0.tgz
    [afei@kafka opt]$ cd kafka_2.11-1.1.0

  1. 启动zk
    kafka依赖zookeeper,zookeeper集群可以自己搭建,也可以用kafka安装包中内置的shell脚本启动zookeeper。
    如果已经安装了zk单机或者zk集群(单机或者集群都可以,取决于你对高可用的要求),那么可以跳过这一步:
  [afei@kafka kafka_2.11-1.1.0]$ bin/zookeeper-server-start.sh config/zookeeper.properties
    [2018-06-21 15:10:14,449] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
    [2018-06-21 15:10:14,466] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
    [2018-06-21 15:10:14,466] INFO autopurge.purgeInterval set to 0 (org.apache.zookeeper.server.DatadirCleanupManager)
    [2018-06-21 15:10:14,467] INFO Purge task is not scheduled. (org.apache.zookeeper.server.DatadirCleanupManager)
    ... ...

这种启动方式如果执行ctrl+z后会退出,启动的进程也会退出,所以建议增加-daemon参数启动:

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

说明:笔者后面的测试,假设在10.0.55.209上部署了独立zk,而不是通过kafka安装包中的脚本部署zk,且端口为默认端口2181。

  1. 配置
    启动kafka之前,需要确认一些配置信息,kafka的配置信息在config/server.properties文件中,笔者配置kafka直接显示指定绑定的ip为10.0.55.229,所以需要增加如下一下配置:
  host.name=10.0.55.229
    port=9092
    listeners=PLAINTEXT://10.0.55.229:9092
    advertised.listeners=PLAINTEXT://10.0.55.229:9092

  1. 启动
    执行如下脚本即可:
  [afei@izwz91rhzhed2c54e6yx87z kafka_2.11-1.1.0]$ bin/kafka-server-start.sh  config/server.properties 
    [2018-06-21 15:15:41,830] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
    [2018-06-21 15:15:42,373] INFO starting (kafka.server.KafkaServer)
    [2018-06-21 15:15:42,374] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
    ... ...

这种启动方式如果执行ctrl+z后会退出,启动的进程也会退出,所以建议增加-daemon参数启动:

  bin/kafka-server-start.sh -daemon  config/server.properties

  • -daemon运行原理
    为什么启动kafka时增加-daemon参数就能实现后台进程方式启动呢?我们首先看一下kafka-server-start.sh最后一行:exec base_dir/kafka-run-class.shEXTRA_ARGS kafka.Kafka "$@",其本质是调用了kafka-run-class.sh,这个脚本的部分代码如下,DAEMON_MODE为true,就能通过nohup ... &方式启动,而DAEMON_MODE为true的前提是COMMAND 为-daemon,COMMAND就是第一个参数:COMMAND=$1,所以启动脚本增加-daemon就能实现后台进程方式启动:

while [ $# -gt 0 ]; do COMMAND=$1 case $COMMAND in -name) DAEMON_NAME=$2 CONSOLE_OUTPUT_FILE=$LOG_DIR/$DAEMON_NAME.out shift 2 ;; -loggc) if [ -z "$KAFKA_GC_LOG_OPTS" ]; then GC_LOG_ENABLED="true" fi shift ;; -daemon) DAEMON_MODE="true" shift ;; *) break ;; esac done # Launch mode if [ "x$DAEMON_MODE" = "xtrue" ]; then nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null & else exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@" fi
  1. 发送消息
    发送消息之前,先创建topic(kafka能自动创建topic,通过配置auto.create.topics.enable决定,但是一般生产环境建议关闭该特性):
  -- 创建topic
    [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-topics.sh --create --zookeeper 10.0.55.209:2181 --replication-factor 1 --partitions 1 --topic TOPIC-TEST-AFEI
    Created topic "TOPIC-TEST-AFEI".

    -- 查看所有创建的topic集合(结果中包含了刚刚创建的名为TOPIC-TEST-AFEI的topic)
    [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-topics.sh --list --zookeeper 10.0.55.209:2181
    TOPIC-TEST-AFEI

使用kafka提供的kafka-console-producer.sh发送消息:

  [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-console-producer.sh --broker-list 10.0.55.229:9092 --topic TOPIC-TEST-AFEI
    >hello+world
    >my+name+is+afei

  1. 接收消息
    使用kafka提供的kafka-console-consumer.sh接收消息:
  [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-console-consumer.sh --bootstrap-server 10.0.55.229:9092 --topic TOPIC-TEST-AFEI --from-beginning
    firt
    hello+world
    my+name+is+afei

集群安装

单机版kafka安装并可以成功发送&接收消息后,搭建kafka集群就比较简单了。

  1. 配置文件
    首先基于conf目录下的server.propreties文件,复制两个文件server-1.propreties,server-2.propreties
    server-1.propreties做如下变更:
  broker.id=1
    port=9093
    log.dirs=/tmp/kafka-logs-1

server-2.properties做类似的变更:

  broker.id=2
    port=9094
    log.dirs=/tmp/kafka-logs-2

由于笔者将三个kafka broker放在一台linux服务器上,所以port不能一样(如果每个broker一台服务器,那么port可以一致,生产环节肯定是每个broker部署在一台独立的服务器上)。但是无论三个broker是否在一台服务器上,broker.id一定是整个集群下全局唯一。否则无法正常启动broker。其原理是在zk上以broker.id的值写入对应的节点,如果写入失败,broker启动就失败。所以整个集群的broker.id要保证全局唯一。

  1. 启动kafka
    执行如下两个命令,分别再启动两个kafka broker:
  bin/kafka-server-start.sh -daemon config/server-1.properties
    bin/kafka-server-start.sh -daemon config/server-2.properties

  1. 集群验证
    由于总计部署了3个broker,所以创建topic时能指定--replication-factor 3,如果不能指定,说明集群部署有问题:
  [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-topics.sh --create --zookeeper 10.0.55.209:2181 --replication-factor 3 --partitions 5 --topic TOPIC-TEST-CLUSTER
    Created topic "TOPIC-TEST-CLUSTER".

查看刚才创建的topic详情,可以看到总计5个分区(PartitionCount),且副本数为3(ReplicationFactor),且每个分区上有3个副本(通过Replicas的值可以得出),另外最后一列Isr(In-Sync Replicas)即表示处理同步状态的副本集合,这些副本与leader副本保持同步,没有任何同步延迟,另外Leader,Replicas Isr中的0,1,2就是broker id,对应配置文件conf/server.properties中的broker.id

  [afei@kafka kafka_2.11-1.1.0]$ bin/kafka-topics.sh --zookeeper 10.0.55.209:2181 --topic TOPIC-TEST-CLUSTER --describe
    Topic:TOPIC-TEST-CLUSTER    PartitionCount:5    ReplicationFactor:3 Configs:
        Topic: TOPIC-TEST-CLUSTER   Partition: 0    Leader: 0   Replicas: 0,1,2 Isr: 0,1,2
        Topic: TOPIC-TEST-CLUSTER   Partition: 1    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0
        Topic: TOPIC-TEST-CLUSTER   Partition: 2    Leader: 2   Replicas: 2,0,1 Isr: 2,0,1
        Topic: TOPIC-TEST-CLUSTER   Partition: 3    Leader: 0   Replicas: 0,2,1 Isr: 0,2,1
        Topic: TOPIC-TEST-CLUSTER   Partition: 4    Leader: 1   Replicas: 1,0,2 Isr: 1,0,2

作者:阿飞的博客

来源:https://www.jianshu.com/p/f3a327ab2998


看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:2. kafka安装

    链接:https://www.javajike.com/article/1786.html

« 3. kafka开启JMX
1. kafka是什么»

相关推荐

QR code