这篇文章主要介绍Kafka怎么利用Java实现数据的生产和消费实例教程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Kafka的介绍
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。
Kafka 有如下特性:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
kafka的术语
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker。
Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition。
Producer:负责发布消息到Kafka broker。
Consumer:消息消费者,向Kafka broker读取消息的客户端。
Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
kafka核心Api
kafka有四个核心API
应用程序使用producer API发布消息到1个或多个topic中。
应用程序使用consumer API来订阅一个或多个topic,并处理产生的消息。
应用程序使用streams API充当一个流处理器,从1个或多个topic消费输入流,并产生一个输出流到1个或多个topic,有效地将输入流转换到输出流。
connector API允许构建或运行可重复使用的生产者或消费者,将topic链接到现有的应用程序或数据系统。
示例图如下:
kafka 应用场景
构建可在系统或应用程序之间可靠获取数据的实时流数据管道。
构建实时流应用程序,可以转换或响应数据流。
以上介绍参考kafka官方文档。
开发准备
如果我们要开发一个kafka的程序,应该做些什么呢?
首先,在搭建好kafka环境之后,我们要考虑的是我们是生产者还是消费者,也就是消息的发送者还是接受者。
不过在本篇中,生产者和消费者都会进行开发和讲解。
在大致的了解kafka之后,我们来开发第一个程序。
这里用的开发语言是Java,构建工具Maven。
Maven的依赖如下:
& lt;才能groupId> org.apache.kafka</groupId> ,,& lt; artifactId> kafka_2.12 ,,& lt; version> 1.0.0 ,,& lt; scope> provided, & lt;才能/dependency> ,, & lt;才能dependency> ,,,& lt; groupId> org.apache.kafka ,,,& lt; artifactId> kafka-clients ,,,& lt; version> 1.0.0 & lt;才能/dependency> ,, & lt;才能dependency> ,,& lt; groupId> org.apache.kafka ,,& lt; artifactId> kafka-streams ,,& lt; version> 1.0.0 & lt;才能/dependency>
<强>卡夫卡生产商
强>
在开发生产的时候,先简单的介绍下卡夫卡各种配置说明:
- <李>
引导。服务器:卡夫卡的地址。
李> <李>ack:消息的确认机制,默认值是0。
李> <李>ack=0:如果设置为0,生产者不会等待卡夫卡的响应。
李> <李>ack=1:这个配置意味着卡夫卡会把这条消息写到本地日志文件中,但是不会等待集群中其他机器的成功响应。
李> <李>ack=:这个配置意味着领袖会等待所有的追随者同步完成。这个确保消息不会丢失,除非卡夫卡集群中所有机器挂掉。这是最强的可用性保证。