慕课网视频连接:https://www.imooc.com/video/17859
github代码链接: https://github.com/AnAngryMan/KafkaSimpleExample
Kafka 流处理平台---是消息队列,但不仅仅是消息队列
Kafka 是一种分布式的,基于发布 / 订阅的消息系统。
Linkend采用scala开发的,
2011年初开源,加入Apache基金会,
2012年从Apache Incubator毕业成为顶级项目
特性:
1.消息队列:可以发布和订阅记录数据的流,类似于消息队列
2.数据流存储的平台,具备数据错误容忍
3.当数据产生时对数据进行处理
应用:
数据传输,数据处理
主要设计目标如下:
- 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。
- 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。
- 支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个 Partition 内的消息顺序传输。
- 同时支持离线数据处理和实时数据处理。
- Scale out:支持在线水平扩展。
基本概念:
Producer:消息和数据的生产者,向kafka的一个topic发布消息进程/代码/服务
Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务
Consumer Group:逻辑概念,对于同一个topic,会广播给不同的group,
同一个group里,只有一个comsumer可以消费该消息
Broker:物理概念,kafka集群中的每个kafka节点
Topic:逻辑概念,kafka消息的类别 ,对数据进行区分,隔离
Partition:物理概念,kafka下数据存储的基本单元.
一个topic,会被分散存储到对各partition,每一个partition是有序的
Replication(副本):同一个Partition可能有多个Replication,多个间数据是一样的
Replication Leader:Leader负责交互
ReplicationManager:负责管理当前broker所有分区和副本的信息,
处理kafkaController发起的一些请求,
副本状态的切换,添加/读取消息
消费者的数目要小于等于partition的数目
特点:
1.分布式:多分区,多副本(容错),多个订阅者,基于zookeeper调度
2.高性能:高吞吐(每秒几十万),高并发,低延迟,时间复杂度O(1)
3.持久性和可扩展性:数据可持久化,容错性,支持在线水平扩展,消息自动平衡(避免消息集中在某几个服务器)
应用场景:
1.消息队列
2.行为跟踪(浏览记录进行记录)
3.元信息监控
4.日志收集
5.流处理
6.事件源
7.持久性日志
安装步骤:https://blog.youkuaiyun.com/u010283894/article/details/77106159
1.安装zookeeper 运行
2.安装kafka 运行 .\bin\windows\kafka-server-start.bat .\config\server.properties
报错解决方式
修改文件:kafka-run-class.bat 以下代码里的 %CLASSPATH% 添加引号
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*
创建topic ./bin/windows/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic imooc-kafka-topic
查看topic .\bin\windows\kafka-topics --list --zookeeper localhost:2181
启动服务者 .\kafka-console-producer.bat --broker-list localhost:9092 --topic imooc-kafka-topic
启动消费者 .\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic imooc-kafka-topic --from-beginning