Kafka集群的安装使用入门

关于kafka

  • Apache Kafka 是一个开源消息系统, 由 Scala 写成。 是由Apache 软件基金会开发的一个开源消息系统项目。
  • Kafka 最初是由 LinkedIn 开发, 并于 2011 年初开源。 2012 年10 月从 Apache Incubator 毕业。 该项目的目标是为处理实时数据提供一个统一、 高通量、 低等待的平台。
  • Kafka 是一个分布式消息队列: 生产者、 消费者的功能。 它提供了类似于 JMS 的特性, 但是在设计实现上完全不同, 此外它并不是 JMS 规范的实现。
  • Kafka 对消息保存时根据 Topic 进行归类
  • 发送消息者称为 Producer, 消息接受者称为 Consumer
  • 此外 kafka 集群有多个 kafka 实例组成, 每个实例(server)称为broker。
  • 无论是 kafka 集群, 还是 producer 和 consumer 都依赖zookeeper 集群保存一些 meta 信息,来保证系统可用性
    在这里插入图片描述

kafka的核心组件

  • Topic : 消息根据 Topic 进行归类
  • Producer: 发送消息者
  • Consumer: 消息接受者
  • broker: 每个 kafka 实例(server)
  • Zookeeper: 依赖集群保存 meta 信息。

Kafka集群的安装与使用

前期准备

本次搭建3台机器的kafka集群, 准备3个虚拟机node1, node2, node3
安装好JDK和zookeeper集群, 配置好hosts文件, 设置好互相之间的ssh免密登录
提前写一个zookeeper集群的一键启动脚本以备之后使用:

#!/bin/bash
for host in node1 node2 node3
do
{
echo $host start
ssh $host "source /etc/profile;/export/server/zookeeper-3.4.7/bin/zkServer.sh start"
echo "$host zk is running"
}
done

开始安装配置

  • 下载安装包
    kafka由scala语言编写
    根据scala的版本提供了两个下载包,下载对应Scala2.11的版本。

  • 解压

    tar -zxvf kafka_2.11-1.0.0.tgz -C /export/servers/

    并将文件夹重命名kafka

  • 修改配置文件
    进入kafka根目录查看目录结构:

    [root@node1 kafka]# ll
    total 52
    drwxr-xr-x. 3 root root  4096 Oct 28  2017 bin
    drwxr-xr-x. 2 root root  4096 Oct 28  2017 config
    drwxr-xr-x. 2 root root  4096 Sep 25 02:43 libs
    -rw-r--r--. 1 root root 28824 Oct 27  2017 LICENSE
    -rw-r--r--. 1 root root   336 Oct 27  2017 NOTICE
    drwxr-xr-x. 2 root root  4096 Oct 28  2017 site-docs
    

    修改config下的server.properties文件
    (1) 修改broker.id, broker.id 标识了kafka集群中一个唯一broker
    broker.id=0

    (2) 数据存放目录(需要创建目录:mkdir -p /export/data/kafka)
    存放生产者生产的数据 数据一般以topic的方式存放
    log.dirs=/export/data/kafka

    (3) 修改zookeeper的连接信息
    zookeeper.connect=node1:2181,node2:2181,node2:2181

    (4) 开启删除topic权限
    如果不添加在删除时只是标记删除或者直接重启
    delete.topic.enable=true

  • 分发到node2和node3

    scp -r /export/server/kafka root@node2:/export/server/
    scp -r /export/server/kafka root@node3:/export/server/

    然后修改node2,node3上的server.properties文件将broker.id分别改为1和2

  • 启动kafka集群,启动三个broker(要先启动zookeeper)
    分别在node1,node2,node3上启动:

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

    或者设置一键启动脚本后台启动:

    #!/bin/bash
    for host in node1 node2 node3
    do
    {
    echo $host start
    ssh $host "source /etc/profile;nohub /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties > /dev/null 2>&1 &"
    echo "$host kafka is running"
    }
    done
    

使用

  1. 一些简单的命令
  • 查看当前服务器中的所有 topic

    bin/kafka-topics.sh --list --zookeeper node1:2181

  • 创建 topic

    bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 1 --topic test

  • 删除 topic

    bin/kafka-topics.sh --delete --zookeeper node1:2181 --topic test

    (需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除或者直接重启)

  • 通过 shell 命令发送消息

    bin/kafka-console-producer.sh --broker-list node1:9092 --topic test

  • 通过 shell 消费消息

    bin/kafka-console-consumer.sh --zookeeper node1:2181 --from-beginning --topic test

  • 查看消费位置

    bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper node1:2181 --group testGroup

  • 查看某个 Topic 的详情

    bin/kafka-topics.sh --topic test --describe --zookeeper node1:2181

  • 对分区数进行修改

    bin/kafka-topics.sh --zookeeper node1 --alter --partitions 2 --topic test

  1. [举个栗子] 通过控制台操作
  • 创建topic(Created topic “order”)

    bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 1 --topic order

  • 查看当前服务器中的topic

    bin/kafka-topics.sh --list --zookeeper node1:2181

    显示结果:
    order

  • 创建生产者,通过控制台输入数据

    bin/kafka-console-producer.sh --broker-list node1:9092 --topic order

    [root@node2 kafka]# bin/kafka-console-producer.sh --broker-list node1:9092 --topic order
    >test1
    >test2
    >
    
  • 创建消费者,消费数据

    bin/kafka-console-consumer.sh --zookeeper node1:2181 --from-beginning --topic order

    [root@node3 kafka]# bin/kafka-console-consumer.sh --zookeeper node1:2181 --from-beginning --topic order
    Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
    test1
    test2
    
  1. [举个栗子] 通过Java API操作
    参见Kafka官网例子: http://kafka.apache.org/0110/documentation.html#api
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值