Kafka的使用场景
-
消息传输
传统的消息总线(Message Bus)或消息代理(Message Broker)具备的批量处理消息和解耦生产者/消费者的特点,kafka都具备,
同时kafka内置的分区机制和副本机制既实现了高性能的消息传输,又保证了高可靠性和高容错性,相比传统的该类应用,kafka能够处理的消息量级更大。
-
网站行为日志追踪
许多公司使用机器学习或者其他实时处理框架需要对用于的各种行为操作进行收集分析,一般用户的操作行为体量是很大的,因此kafka超强的吞吐量就可以在这里派上用场,将用户的操作行为发送到kafka对应的topic上,用于后续的处理分析。
-
审计数据收集
许多系统需要对关键的操作和运维进行监控和审计,这需要从多个运维应用程序中实时汇总操作步骤信息进行集中式管理,kafka可便捷的对多路消息进行实时收集,其持久化的特性可方便后续的离线审计。
-
日志收集
大型系统中,一般会产生巨大的日志量,并且这些日志分散在不同的机器上,可以使用kafka对这些日志进行全量收集并集中送往下游的分布式存储中(例如HDFS等),
相比其他主流的日志抽取框架(例如 Apache Flume),kafka具备更好的性能,提供了完备的可靠性解决方案,同时保持了低延时的特点。
-
Event Sourcing(事件驱动)
事件驱动是领域驱动设计(Domain Driven Design,DDD)的名词,其使用事件序列表示状态变更。
kafka中的消息序列也是不可变更的,因此kafka也适合作为这类应用的后端存储。
-
流式处理
从0.10版本开始,kafka增加了Kafka Streams流式处理组件,因此也可以使用Kafka直接进行数据处理。
安装并运行Kafka
- 下载安装
官方下载地址:kafka.apache.org/downloads
下载完毕后执行解压,并cd到解压后的文件夹下:
tar -zxf kafka_2.13-3.1.0.tgz
cd kafka_2.13-3.1.0
- 启动kafka
启动kafka前,需要先启动Zookeeper,Zookeeper是Kafka中的协调服务工具,Kafka内置了Zookeeper所以不用重新下载,使用下面的命令直接启动Zookeeper即可:
./bin/zookeeper-server-start.sh config/zookeeper.properties
输出 binding to port 0.0.0.0/0.0.0.0:2181 等字眼时,说明Zookeeper启动完毕,接着启动Kafka:
./bin/kafka-server-start.sh config/server.properties
输出 [KafkaServer id=0] started 等字眼时,说明kafka启动完毕,kafka默认服务端口是9092:
- 创建topic
发送消息和接收消息前,我们需要先创建一个topic,下面创建一个名为test的topic,并且该topic只有一个分区(partition)、一个分区副本(replica):
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test --partitions 1 --replication-factor 1
topic创建成功后,通过下面的命令查看该topic的状态:
./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
下面的输出表示test topic下分区数(PartitionCount)是1,副本数(ReplicationFactor)也是1.
- 发送消息
通过kafka提供的kafka-console-producer.sh脚本工具,可直接向topic中发送消息,每次输入消息后,按下回车,该消息将会被发送到topic中,按下ctrl+c可退出本次控制台。
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
- 接收消息
通过kafka-console-consumer.sh工具,可消费topic中的消息,如下:
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
以上命令均在不同的控制台中执行,发送消息与接收消息的控制台同时运行,这边发送,另一边将立即读取到该消息。