贺胖娇的编程之旅......

kafka学习

2021.07.27

环境安装

直接按照文档下载安装。需要注意的是:
zookeeper直接使用curl或者wget下载的文件很可能会损坏,导致解压出错。 可以浏览器直接下载,下载好后通过scp传入到服务器中。

安装的时候,python需要读取env的数据,可能会有如下报错:

/usr/bin/env: ‘python’: No such file or directory

如果安装的是python3,需要注意读取的是/usr/bin/python,这里加一个软链接即可

使用

php使用kafka目前最好的解决方案是使用rdKafka插件。

注意

kafka的版本不兼容可能会导致读取的所有数据都是null

学习kafka的验收标准是能够回答以下问题 (1)kafka是什么?
(2)kafka有什么作用?
(3)在哪些应用场景下可能用到kafka?举例说明
(4)如何使用kafka?使用步骤?
(5)kafka在php中如何使用?用原生代码实现基础使用
(6)在swoole中使用kafka
(7)kafka和其他消息对比优缺点

kafka是什么

kafka是一个消息系统,专为分布式高吞吐量系统而设计。 Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列。 它可以处理大量的数据,能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。 简单来说,可以理解为一个实时的消息处理系统

kafka的优点

以下是Kafka的几个好处 - 可靠性 - Kafka是分布式,分区,复制和容错的。

可扩展性 - Kafka消息传递系统轻松缩放,无需停机。

耐用性 - Kafka使用分布式提交日志,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的。

性能 - Kafka对于发布和订阅消息都具有高吞吐量。 即使存储了许多TB的消息,它也保持稳定的性能。

Kafka非常快,并保证零停机和零数据丢失。

kafka有什么作用

如何使用kafka

关键术语解析

生产者和消费者(producer和consumer);

生产者(producer)消息的发送者,消费者(consumer)是指消息的接收者和使用者

Event

Event(事件)代表过去发生的一个事实。简单理解就是一条消息、一条记录。Event 是不可变的,但是很活跃,经常从一个地方流向另一个地方。

Stream

Stream 事件流表示运动中的相关事件。 当一个事件流进入 Kafka 之后,它就成为了一个 Topic 主题。

broker

kafka集群中有很多台server,其中每一台server都可以存储消息,将每一台server称为一个kafka实例,也叫做broker

Topic

一个逻辑概念,Topic 就是具体的事件流,也可以理解为一个 Topic 就是一个静止的 Stream。 Topic 把相关的 Event 组织在一起,并且保存。一个 Topic 就像数据库中的一张表。Partition 是最小的存储单元,掌握着一个 Topic 的部分数据。

分区(partition)

每个topic都可以分成多个partition,每个partition在存储层面上是append log文件。 任何发布到此partition的消息都会被追加到对应的log文件底部 一个分区对应一个文件,可以将数据存储到不同的server中去,也可以负载均衡,容纳更多的消费者

偏移量(offset)

一个分区对应一个磁盘上的文件,消息在文件中的位置就称为偏移量(offset)。offset是一个long型数字, 可以唯一标记一条消息。kafka没有提供其他额外的机制来存储offset,因此文件只能顺序的读写,在kafka中 几乎不允许对消息进行“随机读写”

副本(replicated)

kafka可以配置partitions需要备份的个数(replicas),每个partitions可以被备份到多台机器上, 以提高可用性,备份的数量可以通过配置文件指定

生产一条数据流程

生产者添加一条数据的的四个参数是:topic,partition,key,value。其中topic和value必须指定,其他参数可选

消费一条数据流程

设置consumer,订阅topic,

kafka在php中如何使用

一般来说,使用php的rdkafka

命令

启动zookeeper:在zookeeper目录执行 ./bin/zkServer.sh start 启动kafka服务器:./bin/kafka-server-start.sh config/server.properties 创建topic ./bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic purchase_test 查看topic list ./bin/kafka-topics.sh –list –zookeeper localhost:2181 启动生产者./bin/kafka-console-producer.sh –broker-list localhost:9092 –topic purchase_test 启动消费者./bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic purchase_test –from-beginning 创建消费者组:javac -cp “/home/hexiaojiao/kafka/zookeeper/kafka_2.11-0.9.0.0/libs/*” ConsumerGroup.java ./bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic purchase-test –from-beginning ./bin/kafka-console-consumer.sh –zookeeper 49.235.238.17:2181 –bootstrap-server 49.235.238.17:9092 –topic purchase-test –from-beginning

发表评论