kafka 知识点

℡╲_俬逩灬. 提交于 2020-03-19 04:54:05
  • kafka 相关术语:
术语 含义
producer,产生消息 消息生产者,发布消息到 kafka 集群的终端或服务。
consumer,消费消息 从 kafka 集群中消费消息的终端或服务。
topic,主题,在主题里分布消息 每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
broker,服务器 kafka 集群中包含的服务器。
Consumer group high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
partition partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
replica partition 的副本,保障 partition 的高可用。
leader replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
follower replica 中的一个角色,从 leader 中复制数据。
controller kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
zookeeper kafka 通过 zookeeper 来存储集群的 meta 信息。
  • kafka 相关命令:
相关命令 说明
bin/zookeeper-server-start.sh config/zookeeper.properties 启动kafka自带zookeeper
bin/kafka-server-start.sh config/server.properties & 再启动kafka
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 创建一个名为“test”的Topic,只有一个分区和一个备份
bin/kafka-topics.sh --list --zookeeper localhost:2181 查看所有创建的topic列表
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic 查看某个topic的具体信息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 生成消息
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning 消费信息
sudo bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties 用Connect连接器从文件导入数据到Kafka topic,再从Kafka topic导出数据到文件。注意:1.如果不能写入文件,可能是没权限,命令前面加上sudo;2.启动Connect时还没有创建topic,那么topic将自动创建(使用默认的分区和副本)
cat file-input.txt bin/kafka-console-producer.sh --broker-list localhost:9092 --topic streams-file-input
bin/kafka-run-class.sh org.apache.kafka.streams.examples.wordcount.WordCountDemo 运行远端java文件(不用自己写)
  • kafka 安装、启动、使用
    更多详细内容(包括模拟集群),查看出处:http://orchome.com/6
    ==================过程开始

    Step 1: 下载代码

    下载0.10.0.0版本并且解压它。
> tar -xzf kafka_2.11-0.10.0.0.tgz 
> cd kafka_2.11-0.10.0.0

Step 2: 启动服务

运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper,如果你没有Zookeeper,你可以使用kafka自带打包和配置好的Zookeeper。

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...

现在启动kafka服务

> bin/kafka-server-start.sh config/server.properties &
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

Step 3: 创建一个主题(topic)

创建一个名为“test”的Topic,只有一个分区和一个备份:

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

创建好之后,可以通过运行以下命令,查看已创建的topic信息:

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

或者,除了手工创建topic外,你也可以配置你的broker,当发布一个不存在的topic时自动创建topic。

Step 4: 发送消息

Kafka提供了一个命令行的工具,可以从输入文件或者命令行中读取消息并发送给Kafka集群。每一行是一条消息。
运行producer(生产者),然后在控制台输入几条消息到服务器。

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
This is a message
This is another message

Step 5: 消费消息

Kafka也提供了一个消费消息的命令行工具,将存储的信息输出出来。

> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
This is a message
This is another message

如果你有2台不同的终端上运行上述命令,那么当你在运行生产者时,消费者就能消费到生产者发送的消息。
==================过程结束

  • Kafka集群保持所有的消息,直到它们过期, 无论消息是否被消费了。

  • 消费者所持有的仅有的元数据就是这个偏移量,也就是消费者在这个log中的位置。 这个偏移量由消费者控制:正常情况当消费者消费消息的时候,偏移量也线性的的增加。但是实际偏移量由消费者控制,消费者可以将偏移量重置为更老的一个偏移量,重新读取消息。 可以看到这种设计对消费者来说操作自如, 一个消费者的操作不会影响其它消费者对此log的处理。

  • 每个分区有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。如果leader宕机,其它的一个follower会被推举为新的leader。 一台服务器可能同时是一个分区的leader,另一个分区的follower。

  • 通常来讲,消息模型可以分为两种, 队列和发布-订阅式。 队列的处理方式是 一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了queue模型。 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。

  • 相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。
    相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。

  • 如果启动Kafka Connect时还没有创建topic,那么topic将自动创建(使用默认的分区和副本),这可能不是最合适的(因为kafka可不知道业务需要,只能根据默认参数创建)。

  • 报错:org.apache.kafka.connect.errors.DataException: JsonDeserializer with schemas.enable requires "schema" and "payload" fields and may not contain additional fields
    解决:https://rmoff.net/2017/09/06/kafka-connect-jsondeserializer-with-schemas-enable-requires-schema-and-payload-fields/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!