18.大数据学习之旅——Kafka(Kafka配置)

Kafka介绍


概述
在这里插入图片描述

官方网址:http://kafka.apache.org/
以下摘自官网的介绍:
Apache Kafka® is a distributed streaming platform . What exactly does that mean?

在这里插入图片描述
在这里插入图片描述

Kafka是由LinkedIn开发的一个分布式的消息系统,最初是用作LinkedIn的活动流(Activity
Stream)和运营数据处理的基础。
活动流数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这
种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件
进行统计分析。
运营数据指的是服务器的性能数据(CPU、IO使用率、请求时间、服务日志等等数据)。运营
数据的统计方法种类繁多。
Kafka使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布

式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。
综上,Kafka是一种分布式的,基于发布/订阅的消息系统,能够高效并实时的吞吐数据,以
及通过分布式集群及数据复制冗余机制(副本冗余机制)实现数据的安全

常用Message Queue对比
RabbitMQ
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,
XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了
Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数
据持久化都有很好的支持。
Redis
Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value
数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。
ZeroMQ
ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZeroMQ能够实现
RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的
复杂度是对这MQ能够应用成功的挑战。但是ZeroMQ仅提供非持久性的队列,也就是说如果
宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据
流的传输(Storm从0.9版本开始同时支持ZeroMQ和Netty(NIO)作为传输模块)。
ActiveMQ
ActiveMQ是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实

现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

适用场景
Messaging
对于一些常规的消息系统,kafka是个不错的选择;partitons/replication和容错,可以使kafka具
有良好的扩展性和性能优势.不过到目前为止,我们应该很清楚认识到,kafka并没有提供JMS中
的"事务性"“消息传输担保(消息确认机制)”“消息分组"等企业级特性;kafka只能使用作为"常
规"的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢
失等)
Website activity tracking
kafka可以作为"网站活性跟踪"的最佳工具;可以将网页/用户操作等信息发送到kafka中.并实时
监控,或者离线统计分析等
Metric
Kafka通常被用于可操作的监控数据。这包括从分布式应用程序来的聚合统计用来生产集中的
运营数据提要。
Log Aggregatio
kafka的特性决定它非常适合作为"日志收集中心”;application可以将操作日志"批量""异
步"的发送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/压缩消息等,
这对producer端而言,几乎感觉不到性能的开支.此时consumer端可以使hadoop等其他系统
化的存储和分析系统

Kafka配置


实现步骤:

  1. 从官网下载安装包 http://kafka.apache.org/downloads
  2. 上传到01虚拟机,解压
  3. 进入安装目录下的config目录
  4. 对server.properties进行配置
    配置示例:
broker.id=0
log.dirs=/home/software/kafka/kafka-logs
zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181
delete.topic.enable=true
advertised.host.name=192.168.234.21
advertised.port=9092
  1. 保存退出后,别忘了在安装目录下创建 kafka-logs目录
  2. 配置其他两台虚拟机,更改配置文件的broker.id编号(不重复即可)
  3. 先启动zookeeper集群
  4. 启动kafka集群
    进入bin目录
    执行:sh kafka-server-start.sh ../config/server.properties
    Kafka在Zookeeper下的路径:
    在这里插入图片描述

Kafka使用


1.创建自定义的topic
在bin目录下执行:
sh kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic
enbook
注:副本数量要小于等于节点数量
2.查看所有的topic
执行:sh kafka-topics.sh --list --zookeeper hadoop01:2181
3.启动producer
执行:sh kafka-console-producer.sh --broker-list hadoop01:9092,hadoop02:9092,hadoop03:9092 --topic
enbook
4.启动consumer
执行:[root@hadoop01 bin]# sh kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic
enbook --from-beginning
5.可以通过producer和consumer模拟消息的发送和接收
6.删除topic指令:
进入bin目录,执行:sh kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic enbook
可以通过配置 config目录下的 server.properties文件,加入如下的配置:

配置示例:
delete.topic.enable=true
在这里插入图片描述

Kafka架构
在这里插入图片描述

1.producer:
消息生产者,发布消息到kafka 集群的终端或服务。
2.broker:
kafka 集群中包含的服务器。broker (经纪人,消费转发服务)
3.topic:
每条发布到 kafka 集群的消息属于的类别,即kafka 是面向 topic 的。
4.partition:
partition 是物理上的概念,每个topic 包含一个或多个partition。kafka 分配的单位是
partition。
5.consumer:
从 kafka 集群中消费消息的终端或服务。
6.Consumer group:
high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被
consumer group 中的一个 Consumer 消费,但可以被多个consumer group 消费。
即组间数据是共享的,组内数据是竞争的。
7.replica:
partition 的副本,保障partition 的高可用。
8.leader:
replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
9.follower:
replica 中的一个角色,从leader 中复制数据。
10.controller:
kafka 集群中的其中一个服务器,用来进行leader election 以及 各种 failover。
11.zookeeper:
kafka 通过 zookeeper 来存储集群的 meta 信息。

Topic与Partition
示意图
在这里插入图片描述

在这里插入图片描述

Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic(主题)。
Partition
Parition是物理上的概念,每个Topic包含一个或多个Partition.
Topic在逻辑上可以被认为是一个queue,每条消息都必须指定它的Topic,可以简单理解为必须指明把这条
消息放进哪个queue里。
为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对
应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且
分别有13个和19个分区,如下图所示。
在这里插入图片描述

因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比
随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)
在这里插入图片描述

对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其
被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略
删除旧数据。一是基于时间,二是基于Partition文件大小。例如可以通过配置
$KAFKA_HOME/config/server.properties,让Kafka删除一周前的数据,也可在Partition文件超过1GB时
删除旧数据,配置如下所示。

配置示例:

# The minimum age of a log file to be eligible for deletion
log.retention.hours=168
# The maximum size of a log segment file. When this size is reached a new log segment will be
created.
log.segment.bytes=1073741824
# The interval at which log segments are checked to see if they can be deleted according to the
retention policies
log.retention.check.interval.ms=300000
# If log.cleaner.enable=true i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值