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
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!