kafka 安装到使用

Kafka 的特点:
以时间复杂度为 O (1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。【据了解,Kafka 每秒可以生产约 25 万消息(50 MB),每秒处理 55 万消息(110 MB)】
支持 Kafka Server 间的消息分区,同时保证每个 Partition 内的消息顺序传输。
分布式系统,易于向外扩展。所有的 producer、broker 和 consumer 都会有多个,均为分布式的。无需停机即可扩展机器。
消息被处理的状态是在 consumer 端维护,而不是由 server 端维护。当失败时能自动平衡。
同时支持离线数据处理和实时数据处理。

Kafka 的整体架构非常简单,producer、broker(kafka)和 consumer 都可以有多个。Producer,consumer 实现 Kafka 注册的接口,数据从 producer 发送到 broker,broker 承担一个中间缓存和分发的作用。broker 分发注册到系统中的 consumer。broker 的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的 TCP 协议。

Kafka 基本概念:
Topic:特指 Kafka 处理的消息源(feeds of messages)的不同分类。
Partition:Topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的 id(offset)。
Message:消息,是通信的基本单位,每个 producer 可以向一个 topic(主题)发布一些消息。
Producers:消息和数据生产者,向 Kafka 的一个 topic 发布消息的过程叫做 producers。
Consumers:消息和数据消费者,订阅 topics 并处理其发布的消息的过程叫做 consumers。
Broker:缓存代理,Kafa 集群中的一台或多台服务器统称为 broker。

安装运行环境

1. 指定更目录
cd /
2. 创建目录
mkdir www
cd /www

3. 下载使用 kafka|zookeeper
kafka
wget downloads.apache.org/kafka/2.5.0/k...
zookeeper
wget apache.inspire.net.nz/zookeeper/zo...

4. 解压两个包
tar zxvf kafka_2.12-2.5.0.tgz
tar zxvf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin zookeeper
mv kafka_2.12-2.5.0.tgz kafka

5. 配置 zookeeper
cd zookeeper
mkdir data
cd conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

cd ../
cd data
vi myid (输入 1,保存退出) 对应 zoo.cfg 的配置文件的中 server.1

6. 在 zookeeper 目录下 启动服务
./bin/zkServer.sh start
成功启动如下
$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg
$ Starting zookeeper … STARTED

7. 切换到 kafka 目录,配置服务端文件
cd /www/kakfa
vi /config/server.properties
放开对外监听地址
advertised.listeners=PLAINTEXT://192.168.10.10:9092
填写 zookeeper 地址
zookeeper.connect=192.168.10.10:2181

8. 启动 kafka(启动成功自动注册到 zookeeper 服务),成功返回 pid
bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &

9. 启动服务端,查看 kakfa 是否成功注入,zookeeper 服务是否正常
./zkCli.sh -server 192.168.10.10:2181
出现以下,说明客户端没问题,可查看 zookeeper 管理的项目目录
[zk: localhost:2181(CONNECTED) 0]

撸代码(kafka-php 发现无法主动创建主题,未解决)
包地址里,面有简单的事例和使用说明
packagist.org/packages/nmred/kafka...

rdkafka 参考文档
arnaud.le-blanc.net/php-rdkafka-do...

本作品采用《CC 协议》,转载必须注明作者和本文链接
mar_he
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

感觉 kafka 对 PHP 支持不是很友好 rdkafka 里边就那么几个方法 生产,消费 比如我查 topic 里有多少东西 就没有提供这个方法

4年前 评论
mar_he

主题的问题(暂时解决)

获取主题 $topics = shell_exec ($kafka_dir . '/bin/kafka-topics.sh --zookeeper '.$zookeeper_ip.':'.$zookeeper_port.' --list'); $topics_arr = explode ("\n",$topics); $send_topics = Arr::pluck ($value,'topic'); 根据获取的主题判断是否添加主题 foreach ($send_topics as $topic){ if (!in_array ($topic,$topics_arr)) { exec ($kafka_dir.'/bin/kafka-topics.sh --create --zookeeper '.$zookeeper_ip.':'.$zookeeper_port.' --replication-factor 1 --partitions 1 --topic '.$topic); } }

4年前 评论

@mar_he 这个命令服务器一般禁止使用啊

4年前 评论