安装和测试Kafka

安装和测试Kafka

本文主要介绍如何在单节点上安装 Kafka 并测试 broker、producer 和 consumer 功能。

下载

进入下载页面:http://kafka.apache.org/downloads.html ,选择 Binary downloads下载 (Source download需要编译才能使用),这里我下载 kafka_2.11-0.8.2.1,其对应的 Scala 版本为 2.11

$ wget http://apache.fayea.com/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz

解压并进入目录:

$ tar -xzvf kafka_2.11-0.8.2.1.tgz
$ cd kafka_2.11-0.8.2.1

查看目录结构:

tree -L 2
.
├── bin
│   ├── kafka-console-consumer.sh
│   ├── kafka-console-producer.sh
│   ├── kafka-consumer-offset-checker.sh
│   ├── kafka-consumer-perf-test.sh
│   ├── kafka-mirror-maker.sh
│   ├── kafka-preferred-replica-election.sh
│   ├── kafka-producer-perf-test.sh
│   ├── kafka-reassign-partitions.sh
│   ├── kafka-replay-log-producer.sh
│   ├── kafka-replica-verification.sh
│   ├── kafka-run-class.sh
│   ├── kafka-server-start.sh
│   ├── kafka-server-stop.sh
│   ├── kafka-simple-consumer-shell.sh
│   ├── kafka-topics.sh
│   ├── windows
│   ├── zookeeper-server-start.sh
│   ├── zookeeper-server-stop.sh
│   └── zookeeper-shell.sh
├── config
│   ├── consumer.properties
│   ├── log4j.properties
│   ├── producer.properties
│   ├── server.properties
│   ├── test-log4j.properties
│   ├── tools-log4j.properties
│   └── zookeeper.properties
├── libs
│   ├── jopt-simple-3.2.jar
│   ├── kafka_2.11-0.8.2.1.jar
│   ├── kafka_2.11-0.8.2.1-javadoc.jar
│   ├── kafka_2.11-0.8.2.1-scaladoc.jar
│   ├── kafka_2.11-0.8.2.1-sources.jar
│   ├── kafka_2.11-0.8.2.1-test.jar
│   ├── kafka-clients-0.8.2.1.jar
│   ├── log4j-1.2.16.jar
│   ├── lz4-1.2.0.jar
│   ├── metrics-core-2.2.0.jar
│   ├── scala-library-2.11.5.jar
│   ├── scala-parser-combinators_2.11-1.0.2.jar
│   ├── scala-xml_2.11-1.0.2.jar
│   ├── slf4j-api-1.7.6.jar
│   ├── slf4j-log4j12-1.6.1.jar
│   ├── snappy-java-1.1.1.6.jar
│   ├── zkclient-0.3.jar
│   └── zookeeper-3.4.6.jar
├── LICENSE
└── NOTICE

4 directories, 45 files

启动和停止

运行 kafka ,需要依赖 zookeeper,你可以使用已有的 zookeeper 集群或者利用 kafka 提供的脚本启动一个 zookeeper 实例:

$ bin/zookeeper-server-start.sh config/zookeeper.properties &  

默认的,zookeeper 会监听在 *:2181/tcp

停止刚才启动的 zookeeper 实例:

$ bin/zookeeper-server-stop.sh  

启动Kafka server:

$ bin/kafka-server-start.sh config/server.properties &  

config/server.properties 中有一些默认的配置参数,这里仅仅列出参数,不做解释:

broker.id=0

port=9092

#host.name=localhost

#advertised.host.name=<hostname routable by clients>

#advertised.port=<port accessible by clients>

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=/tmp/kafka-logs

num.partitions=1

num.recovery.threads.per.data.dir=1

#log.flush.interval.messages=10000

#log.flush.interval.ms=1000

log.retention.hours=168

#log.retention.bytes=1073741824

log.segment.bytes=1073741824

log.retention.check.interval.ms=300000

log.cleaner.enable=false

zookeeper.connect=localhost:2181

zookeeper.connection.timeout.ms=6000

如果你像我一样是在虚拟机中测试 kafka,那么你需要修改 kafka 启动参数中 JVM 内存大小。查看 kafka-server-start.sh 脚本,修改 KAFKA_HEAP_OPTS 处 -Xmx和 -Xms 的值。

启动成功之后,会看到如下日志:

[2015-03-17 11:19:30,528] INFO Starting log flusher with a default period of 9223372036854775807 ms. (kafka.log.LogManager)
[2015-03-17 11:19:30,604] INFO Awaiting socket connections on 0.0.0.0:9092. (kafka.network.Acceptor)
[2015-03-17 11:19:30,605] INFO [Socket Server on Broker 0], Started (kafka.network.SocketServer)
[2015-03-17 11:19:30,687] INFO Will not load MX4J, mx4j-tools.jar is not in the classpath (kafka.utils.Mx4jLoader$)
[2015-03-17 11:19:30,756] INFO 0 successfully elected as leader (kafka.server.ZookeeperLeaderElector)
[2015-03-17 11:19:30,887] INFO Registered broker 0 at path  /brokers/ids/0 with address cdh1:9092. (kafka.utils.ZkUtils$)
[2015-03-17 11:19:30,928] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
[2015-03-17 11:19:31,048] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)

从日志可以看到:

  • log flusher 有一个默认的周期值
  • kafka server 监听在9092端口
  • 在 cdh1:9092 上注册了一个 broker 0 ,路径为 /brokers/ids/0

停止 Kafka server :

$ bin/kafka-server-stop.sh

单 broker 测试

在启动 kafka-server 之后启动,运行producer:

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

在另一个终端运行 consumer:

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

在 producer 端输入字符串并回车,查看 consumer 端是否显示。

多 broker 测试

配置和启动 Kafka broker

接下来参考 Running a Multi-Broker Apache Kafka 0.8 Cluster on a Single Node 这篇文章,基于 config/server.properties 配置文件创建多个 broker 的 kafka 集群。

创建第一个 broker:

$ cp config/server.properties config/server1.properties

编写 config/server1.properties 并修改下面配置:

broker.id=1
port=9092
log.dir=/tmp/kafka-logs-1

创建第二个 broker:

$ cp config/server.properties config/server2.properties

编写 config/server2.properties 并修改下面配置:

broker.id=2
port=9093
log.dir=/tmp/kafka-logs-2

创建第三个 broker:

$ cp config/server.properties config/server3.properties

编写 config/server3.properties 并修改下面配置:

broker.id=3
port=9094
log.dir=/tmp/kafka-logs-3

接下来分别启动这三个 broker:

$ JMX_PORT=9999  ; nohup bin/kafka-server-start.sh config/server1.properties &
$ JMX_PORT=10000  ; nohup bin/kafka-server-start.sh config/server2.properties &
$ JMX_PORT=10001  ; nohup bin/kafka-server-start.sh config/server3.properties &

下面是三个 broker 监听的网络接口和端口列表:

        Broker 1     Broker 2      Broker 3
----------------------------------------------
Kafka   *:9092/tcp   *:9093/tcp    *:9094/tcp
JMX     *:9999/tcp   *:10000/tcp   *:10001/tcp

创建 Kafka topic

在 Kafka 0.8 中有两种方式创建一个新的 topic:

  • 在 broker 上开启 auto.create.topics.enable 参数,当 broker 接收到一个新的 topic 上的消息时候,会通过 num.partitions 和 default.replication.factor两个参数自动创建 topic。
  • 使用 bin/kafka-topics.sh 命令

创建一个名称为 zerg.hydra 的 topic:

$ bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic zerg.hydra --partitions 3 --replication-factor 2

使用下面查看创建的 topic:

$ bin/kafka-topics.sh --zookeeper localhost:2181 --list
test
zerg.hydra

还可以查看更详细的信息:

$ bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic zerg.hydra
Topic:zerg.hydra    PartitionCount:3    ReplicationFactor:2 Configs:
    Topic: zerg.hydra   Partition: 0    Leader: 2   Replicas: 2,3   Isr: 2,3
    Topic: zerg.hydra   Partition: 1    Leader: 3   Replicas: 3,0   Isr: 3,0
    Topic: zerg.hydra   Partition: 2    Leader: 0   Replicas: 0,2   Isr: 0,2

默认的,Kafka 持久化 topic 到 log.dir 参数定义的目录。

$ tree /tmp/kafka-logs-{1,2,3}
/tmp/kafka-logs-1                   # first broker (broker.id = 1)
├── zerg.hydra-0                    # replica of partition 0 of topic "zerg.hydra" (this broker is leader)
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
├── zerg.hydra-2                    # replica of partition 2 of topic "zerg.hydra"
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
└── replication-offset-checkpoint

/tmp/kafka-logs-2                   # second broker (broker.id = 2)
├── zerg.hydra-0                    # replica of partition 0 of topic "zerg.hydra"
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
├── zerg.hydra-1                    # replica of partition 1 of topic "zerg.hydra" (this broker is leader)
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
└── replication-offset-checkpoint

/tmp/kafka-logs-3                   # third broker (broker.id = 3)
├── zerg.hydra-1                    # replica of partition 1 of topic "zerg.hydra"
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
├── zerg.hydra-2                    # replica of partition 2 of topic "zerg.hydra" (this broker is leader)
│   ├── 00000000000000000000.index
│   └── 00000000000000000000.log
└── replication-offset-checkpoint

6 directories, 15 files

启动一个 producer

以 sync 模式启动一个 producer:

$ bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --sync --topic zerg.hydra

然后,输入以下内容:

Hello, world!
Rock: Nerf Paper. Scissors is fine.

启动一个 consumer

在另一个终端运行:

$ bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic zerg.hydra --from-beginning

注意,生产环境通常不会添加 --from-beginning 参数。

观察输出,你会看到下面内容:

Hello, world!
Rock: Nerf Paper. Scissors is fine.

把 consumer 停掉再启动,你还会看到相同的输出结果。

将日志推送到 kafka

例如,将 apache 或者 nginx 或者 tomcat 等产生的日志 push 到 kafka,只需要执行下面代码即可:

$ tail -n 0 -f  /var/log/nginx/access.log | bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,localhost:9094 --sync --topic zerg.hydra

参考文章

<think>首先,用户的问题是关于在 macOS 上安装、配置测试 Apache Kafka。我需要根据提供的引用内容来构建一个结构清晰的回答。引用内容涉及 Kafka 安装的通用步骤,包括环境准备、下载、配置启动服务。 关键点: - 引用[1]:提到环境准备(系统要求、下载 Kafka)、单机版部署、配置 Zookeeper。 - 引用[2]:提供 macOS 安装 Kafka 的下载链接。 - 引用[3]:介绍 Kafka 安装教程,包括启动服务。 - 引用[4]:讨论 Kafka 安装所需环境,如操作系统、JDK、Scala、Broker 节点、Zookeeper。 用户指定了 macOS,所以我需要聚焦于 macOS 的具体步骤。引用[2]引用[3]都提到了 macOS,因此我将优先参考这些。 系统级指令: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式。 - LaTeX 语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如 [^1]。 用户可见层: - 回答结构清晰,逐步解决问题。 - 保证回答真实可靠。 结构我的回答: 1. **环境准备**:包括系统要求、JDK 安装等。 2. **下载安装 Kafka**:使用提供的链接下载。 3. **配置启动服务**:包括 Zookeeper Kafka broker。 4. **测试 Kafka**:创建主题、生产者、消费者来验证安装。 5. **生成相关问题**:在回答结束后添加相关问题。 确保引用: - 当引用具体内容时,在末尾添加标识,如 [^1]。例如,引用下载链接或配置步骤。 具体步骤: - **步骤 1: 环境准备** - macOS 系统要求:确保有足够内存磁盘。 - 安装 JDK:Kafka 需要 Java,所以先安装 JDK 8+。 - **步骤 2: 下载 Kafka** - 使用 wget 或浏览器下载 Kafka 包。 - 解压到目录。 - **步骤 3: 启动 Zookeeper** - Kafka 依赖于 Zookeeper。启动 Zookeeper 服务。 - **步骤 4: 启动 Kafka Broker** - 配置 server.properties 并启动 Kafka。 - **步骤 5: 测试 Kafka** - 创建主题。 - 启动生产者消费者。 - 发送接收消息。 参考引用: - 引用[1]:下载链接基本配置。 - 引用[2]:macOS 下载链接。 - 引用[3]:启动服务命令。 - 引用[4]:环境要求。 添加引用标识: - 在相关段落末尾添加,如 "下载 Kafka 可以使用官方链接 [^2]." 生成相关问题: - 在回答结束后,添加 "相关问题" 部分,列出几个相关问题。 最终回答结构: 1. 介绍:简要说明 Kafka 安装。 2. 详细步骤:分步指南。 3. 测试部分:如何验证安装。 4. 相关问题:列出相关问题。</think>### macOS 安装、配置测试 Apache Kafka 教程 Apache Kafka 是一个分布式流处理平台,广泛用于构建实时数据管道流应用。在 macOS 上安装 Kafka 需要准备 Java 环境、下载 Kafka 包、启动 Zookeeper Kafka 服务,并进行基本测试。以下是详细步骤,确保操作前 macOS 系统满足要求:内存至少 2GB、磁盘空间充足(建议 SSD)、已安装 JDK 8+。如果未安装 JDK,可通过 Homebrew 安装:`brew install openjdk@11` 并配置环境变量[^4]。 #### 步骤 1: 下载解压 Kafka Kafka 依赖于 Zookeeper,但 Kafka 包已包含 Zookeeper,无需单独安装。请从 Apache 官网下载最新稳定版 Kafka(当前推荐版本 3.4.0)。 - **下载命令**: ```bash # 使用 wget 下载(若无 wget,先安装:brew install wget) wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz ``` 或手动下载:访问 [Apache Kafka 下载页面](https://kafka.apache.org/downloads),选择 macOS 兼容版本[^2][^3]。 - **解压并进入目录**: ```bash tar -xzf kafka_2.13-3.4.0.tgz cd kafka_2.13-3.4.0 ``` #### 步骤 2: 配置启动服务 Kafka 需要先启动 Zookeeper,再启动 Kafka broker。所有配置文件位于 `config` 目录,默认配置即可用于测试。 - **启动 Zookeeper**: 打开一个新终端窗口,执行: ```bash bin/zookeeper-server-start.sh config/zookeeper.properties ``` Zookeeper 会监听端口 2181,用于管理 Kafka 集群状态[^1][^4]。 - **启动 Kafka Broker**: 再打开一个新终端窗口,执行: ```bash bin/kafka-server-start.sh config/server.properties ``` Kafka 默认监听端口 9092。如果需要修改配置(如日志路径),编辑 `config/server.properties` 文件[^3]。 #### 步骤 3: 测试 Kafka 安装 验证 Kafka 是否正常工作,通过创建主题、生产者消费者进行测试。 - **创建测试主题**: 打开一个新终端窗口,执行: ```bash bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 ``` 这会创建一个名为 `test-topic` 的主题。 - **启动生产者发送消息**: 执行: ```bash bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092 ``` 输入几条消息,如 `Hello Kafka`,按 Enter 发送。 - **启动消费者接收消息**: 打开另一个终端窗口,执行: ```bash bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092 ``` 如果消费者能实时显示生产者发送的消息(如 `Hello Kafka`),则 Kafka 安装成功[^1][^3]。 #### 常见问题处理 - **端口冲突**:如果端口 2181 或 9092 被占用,修改 `config/zookeeper.properties` 或 `config/server.properties` 中的端口号。 - **内存不足**:增加 JVM 内存,编辑 `bin/kafka-server-start.sh`,设置 `export KAFKA_HEAP_OPTS="-Xmx2G -Xms1G"`。 - **停止服务**:按 Ctrl+C 关闭 Kafka Zookeeper 进程,或使用 `bin/kafka-server-stop.sh` `bin/zookeeper-server-stop.sh`。 完成测试后,Kafka 即可用于开发或集成。更多高级配置(如集群部署)请参考 [Apache Kafka 官方文档](https://kafka.apache.org/documentation/)[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值