026-Kafka

作者: 郭艺宾 | 来源:发表于2018-07-03 19:15 被阅读2次

Kafka 概述

Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进行处理。

Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 Kafka 的定义:一个分布式发布-订阅消息传递系统。

Kafka 特性

1    高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;

2    可扩展性:kafka集群支持热扩展;

3    持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;

4    容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);

5    高并发:支持数千个客户端同时读写;

6    支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;

Kafka 使用场景

1    日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;

2    消息系统:解耦和生产者和消费者、缓存消息等;

3    用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;

4    运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;

5    流式处理:比如spark streaming和storm;

6    事件源;

Spring Boot + Kafka

首先创建项目:

此处只是为了演示,只需加两个简单的依赖即可。

传递消息,需要添加json转换工具:

然后配置文件:

bootstrap-servers表示kafka的地址,如果是集群用逗号分隔。

下面的consumer和producer表示消息的生产和消费

group-id是唯一标识

key-deserializer和value-dserializer表示序列化的类

接下来定义几个类,分别是消息,主题,发送,接收,controller测试类,具体内容如下:

首先定义消息类:

然后定义主题,主题就是配置一个topic的常量名称:

接下来定义消息生产者,直接使用 KafkaTemplate 发送消息 ,Spring Boot自动装配,不需要自己定义一个Kafka配置类。

定义一个泛型类KafkaSender<T>,T 就是你需要发送的消息 对象,序列化使用阿里的 fastjson消息发送后,可以在回调类里面处理自己的业务,ListenableFutureCallback类有两个方法,分别是onFailureon和onSuccess,实际场景可以在这两个方法,处理自己的具体业务,这里不做实现。

接下来定义消息消费者,使用@KafkaListener 注解监听 topics 消息,此处的topics 必须和 send 函数中的 一致@Header(KafkaHeaders.RECEIVED_TOPI 直接获取 topic:

最后定义测试接口,直接使用 @Autowired 对类 KafkaSender 自动装配,然后调用 send 方法发送消息即可,下面给出代码:

可以看到消息的发送测试方法很简单,接下来可以启动项目,进行测试,先看项目启动的日志:

可以看到,读取配置并且启动成功,接下来清空控制台日志,测试发送消息的接口:

可以看到发送返回成功,接下来看下控制台日志:

可以看到发送和接收消息以及消息体的转换都成功了。

kafka服务搭建

kafka的服务要自行搭建,除了通过正常的官网安装包搭建之外,比较快速的是通过docker搭建,这里介绍两个命令:

搭建zookeeper:

docker run -dit --name zookeeper -p 2181:2181 wurstmeister/zookeeper

搭建kafka:

docker run -dit --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=10.2.0.18:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.2.0.18:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

注意将上面的ip改成自己电脑的即可。

kafka可视化工具(Kafka Tool)

官网:http://www.kafkatool.com

可以根据系统下载:

安装完成后,可以连接docker安装好的kafka:

上面就是springboot整合kafka的简单例子。

参考原文:https://www.jianshu.com/p/04eff11430e4

代码地址: https://gitee.com/blueses/spring-boot-demo

相关文章

  • 026-Kafka

    Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你...

网友评论

    本文标题:026-Kafka

    本文链接:https://www.haomeiwen.com/subject/mfbjuftx.html