kafka——(一):初识kafka

学习资源安利

  1. 官网1.1
    ~2. Kafka 0.11.0中文文档【收费的】~
  2. 还是apachecn厚道靠普
  3. 李志涛csdn
  4. OrdHome kafka中文教程
  5. 郭俊 Jason的博客
  6. 知乎的讨论
  7. 视频资源,csdn搜索吧

需求

其实了解kafka也有一段时间了,最近可能需要从一个接口获得数据放进HDFS,感觉直接接受接口的数据放进Hive也不是不可以,但是考虑到稳定性可靠性,决定还是用下kafka,看看具体有什么不同。

参考:为什么使用消息系统【解耦、冗余、扩展、峰值处理能力、可恢复性、异步处理、顺序性、缓冲

主要是可靠性和普适性:前者中,消息队列起到安全缓存的作用,保证数据不丢失;后者,多个不同的服务,不必要二次开发消息传递组件(也是领英开发kafka的原因所在)

现实生活中,很多系统监控和理解的对象都是连续不断的流,比如说用户健康数据、GPS信号、物联网的各种传感器数据等,因此以数据流的方式采集和分析数据也是顺理成章的事。

消息队列的两种模式

\ 点对点-Queue 发布/订阅:Topic
概念 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息
最主要区别 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 和点对点方式不同,发布到topic的消息会可以被多个订阅者消费。(可持久化——解耦消息的发送者和消费者;kafka中,可以通过参数配置保留期限)

kafka——(一):初识kafka_第1张图片
more:参考此文

几种常见的消息系统

kafka——(一):初识kafka_第2张图片

kafka各个版本的新特性

可参考此文
0.9版本有较大的改变,不再有高级低级API之分。

安装启动kafka

1.cdh中安装kafka:下载parcel——分发激活——设置broker以及Mirromaker节点——注意whitelist(白名单)以及JVM 对内存的设置,出错参考

Producer/Consumer使用初探

  1. –create 创建一个toipc:
    ./kafka-topics --create --zookeeper ip10:2181,ip11:2181,ip12:2181 --replication-factor 1 --partitions 3 --topic testTopic
    【通过主题,可以避免消费者读取其他不相关的数据】

  2. –list 查看所有topic:
    ./kafka-topics --list --zookeeper ip10:2181,ip11:2181,ip12:2181

  3. –descirbe 查看topic详细信息:
    ./kafka-topics --describe --zookeeper ip10:2181,ip11:2181,ip12:2181
    kafka——(一):初识kafka_第3张图片

  4. 建立发布者console-producer:

    Kafka自带一个命令行客户端,它从文件或标准输入中获取输入,并将其作为message(消息)发送到Kafka集群。默认情况下,每行将作为单独的message发送。
    运行 producer,然后在控制台输入一些消息以发送到服务器。
    ~./kafka-console-consumer --broker-list ip10:9092 --topic testTopic
    ~
    ~没反应。。。提示:broker-list is not a recognized option,cdh的kafka有不一样?~
    ~找了一圈,然后在cloudera官网中找到了答案
    最开始我”理所当然“的认为,命令位于/opt/cloudera/parcels/KAFKA-3.1.0-1.3.1.0.p0.35/bin/下面,因为,该有的,它都有了。。。:
    ~
    这里写图片描述
    ~/usr/bin/下的使用命令,效果一样,还是没反应~

命令敲错了,[producer 敲成了consumer ]:
./kafka-console-producer --broker-list ip10:9092,ip11:9092,ip12:9092 --topic testTopic

5.启动消费者:
kafka-console-consumer --zookeeper ip10:2181,ip11:2181,ip12:2181 --topic testTopic
注意,偏移检查已经废弃:新的Consumer API不支持kafka-consumer-offset-checker

push还是pull

  • producer 采用 push 模式将消息发布到 broker,每条消息都被 append 到 patition 中;
  • kafka的实例broker与consumer之间的数据”沟通“,是consumer向broker pull数据,而不是broker主动向消费者/订阅者主动push数据,这样做的好处有:
    1.降低broker的压力,borker可以减少对consumer的管理,少记录一些信息;consumer 可自主控制消费消息的速率,可简化 broker 的设计;
    2.push 模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。[1]
    3.您可以让一位消费者实时处理消息,另一位消费者以批处理模式处理消息。
    另一个原因可能是kafka不仅仅是为像hadoop这样的单一消费者设计的。不同的消费者可以有不同的需求和能力。[2]

基于流的计算摒弃了全局状态的概念,因为全局掌控数据状态的代价太高昂,各个部件不需要假装知道系统其他部件到底正在做什么。因此,不需要协调就可以完成更多的工作。


2018/6/10增

  • kafka按照消息传递过来的顺序依次将消息写入文件;消费者可以按照自己设定的顺序(偏移量)来读取文件。
  • 在一个主题具有多个分区时,只能保证单个分区中读取出来的数据的顺序性(就像多个机器同时跑top k 任务);当消费者以多线程的方式读取消息时,如果要保证单个分区的有序性,还应该让线程数不超过分区数。
  • kafka所有消息都是异步发送的,可调节缓冲区buffer.size或者指定延时时间linger.size来权衡吞吐量和延时。

参考

[1] pull or push–博客园
[2] pull or push–stackoverflow

你可能感兴趣的:(Hadoop,Spark,Hbase...)