首页 > 其他分享 >kafka 设置消费者多线程参数说明

kafka 设置消费者多线程参数说明

时间:2024-07-28 10:41:04浏览次数:10  
标签:消费 消费者 分区 主题 kafka 线程 参数 多线程 Kafka

一、设置消费者多线程 参数

  private static final int CONSUMER_THREAD_NUM = 1;
  //订阅topic Map<String, Integer> topicCountMap = Collections.singletonMap(topic, CONSUMER_THREAD_NUM); 
  Map<String, List<KafkaStream<byte[], byte[]>>> messageStreams = consumerConnector.createMessageStreams(topicCountMap);

1.1 在 Kafka 的旧版 API 中(特别是 0.8 版本及其之前的版本),createMessageStreams 方法用于创建从 Kafka 主题读取数据的消息流。这个方法通常存在于 Kafka 的高级消费者 API 中。

  topicCountMap 参数是一个映射,其键是 Kafka 主题的名称,值是该主题应该有多少个消费者线程或流来消费数据。这通常用于指定每个主题应有多少并发读取线程。   具体来说,topicCountMap 的作用如下:
  1. 主题的识别:键(Key)是 Kafka 主题的名称。这告诉 Kafka 消费者你想从哪些主题中读取数据。
  2. 并发控制:值(Value)是整数,表示你希望为该主题创建多少个消息流。每个消息流都会有一个单独的消费者线程来读取主题中的消息。例如,如果你为某个主题指定了值 3,那么将会有三个并发的消费者线程读取该主题的消息。
这样做的目的是提高吞吐量。当你有多个分区,并且希望并行地从这些分区读取数据时,你可以为每个分区分配一个或多个消费者线程。但是,请注意,在同一个消费者组中,每个分区只能被一个消费者线程消费,以确保消息的顺序性和不会重复消费。 需要注意的是,随着 Kafka 的发展,新的消费者 API(基于 Java 的 KafkaConsumer 类)已经取代了旧的高级消费者 API。在新的 API 中,消费者组的概念和分区分配策略得到了更好的支持和控制,使得并发消费更加灵活和高效。因此,如果你正在使用较新版本的 Kafka,建议查阅相关文档以了解如何使用新的消费者 API   1.2 如果你为某个主题指定了值 3,那么将会有三个并发的消费者线程读取该主题的消息。 是消费一个分区的消息吗 如果你为某个主题在 topicCountMap 中指定了值 3,并不意味着这三个消费者线程将仅消费该主题的一个分区。实际上,这三个消费者线程将尝试消费该主题的所有分区,但具体哪个线程消费哪个分区取决于 Kafka 的分区分配策略。 在 Kafka 中,一个消费者组内的消费者线程会共同消费该组订阅的所有主题的所有分区。每个分区只能由组内的一个消费者线程消费,以确保消息的顺序性和不重复消费。 当你有多个消费者线程在消费者组内时,Kafka 会使用分区分配策略(如 Range 或 RoundRobin)来决定每个消费者线程应该消费哪些分区。这意味着,如果你有 3 个消费者线程,并且主题有 4 个分区,那么可能有两个线程各消费一个分区,而第三个线程消费剩下的两个分区。 因此,为某个主题指定值 3 意味着你希望为该主题启动 3 个消费者线程,并让这些线程共同消费该主题的所有分区。具体每个线程消费哪些分区,则取决于 Kafka 的分区分配策略和当前消费者组的状态  

 

 

 二、关于kafka 消费者 消费者线程和消费分区说明

  1、 kafka 消费者 设置3个消费线程 ,三个消费者线程将尝试消费该主题的所有分区,每个分区只能由组内的一个消费者线程消费,以确保消息的顺序性和不重复消费,如kafka有3个分区 只有一个消费者但设置3个消费线程那应该每个消费者线程消费一个分区,但不般不这样设置 正常一个消费者设置一个消费线程,一个消费者线程消费这3个分区。 如果想提高消费速度可以在拉取消息 处理业务逻辑时开启多个线程。  设置消费者线程数量


private static final int CONSUMER_THREAD_NUM = 1;
//订阅topic
Map<String, Integer> topicCountMap = Collections.singletonMap(topic, CONSUMER_THREAD_NUM);

 Map<String, List<KafkaStream<byte[], byte[]>>> messageStreams = consumerConnector.createMessageStreams(topicCountMap);

 

2、分区分配策略有哪些   Range(范围)分配策略: 它基于消费者实例的总数和分区的总数进行整除运算,以确保分区尽可能均匀地分配给所有消费者 (默认选择)    RoundRobin(轮询)分配策略:RoundRobin策略将消费者组内的所有消费者以及它们所订阅的所有主题的分区按照某种顺序(通常是hashcode)进行排序,然后通过轮询的方式逐个将分区分配给每个消费者   通过 :partition.assignment.strategy 可以配置分区分配策略  

标签:消费,消费者,分区,主题,kafka,线程,参数,多线程,Kafka
From: https://www.cnblogs.com/liyanbofly/p/18084446

相关文章

  • 【变压器的开路和短路试验】提供从开路和短路试验中获得的结果电阻性和感性参数(Simuli
      ......
  • Python入门知识点 8--函数基础与函数参数
    一、初识函数(function)编程函数!=数学函数,里面的是逻辑功能,而不是套公式编程函数的作用是实现特定操作的一段代码有钱了给100个朋友都点一份这样的吃的,大家都是点一样的东西   1.薯条;   2.上校鸡块;   3.全鸡;一个个去点单会很麻烦这个时候就会用到套餐......
  • c语言模拟Python的命名参数
    最近在书里看到的,让c语言去模拟其他语言里有的命名函数参数。觉得比较有意思所以记录一下。目标众所周知c语言里是没有命名函数参数这种东西的,形式参数虽然有自己的名字,但传递的时候并不能通过这个名字来指定参数的值。而支持命名参数的语言,比如python里,我们能让代码达到这种效......
  • dataclass_transform() 得到了意外的关键字参数“field_specifiers”
    我正在尝试使用这个G2P包但我收到dataclass_transform()gotanunexpectedkeywordargument'field_specifiers'这个错误。我正在尝试运行他们在我的jupyter笔记本中运行后提供的示例代码。下面附有我收到错误的示例代码。有人可以帮我解决这个问题吗?......
  • Singledispatch 并将类型作为输入参数
    我希望能够做到这一点:fromtypingimportTypefromfunctoolsimportsingledispatchclassA:passclassB(A):pass@singledispatchdeffoo(arg):print('default')@foo.registerdef_(arg:Type[A]):print(arg)foo(A)foo(B)但是,我得到......
  • 如何注释可以转换为布尔值的参数?
    我开始进入python3.6中的类型提示(又名注释),并且我无法理解此功能的一些动态方面。我编写了以下代码段,我想添加注释和即使在查看了有关类型提示的文档后,也不知道如何实现。这是函数:defvalidate_expression(expression:?):try:assertexpressione......
  • JavaEE 初阶(8)——多线程6之线程安全下-->volatile
    之前,我们在 JavaEE初阶(6) 这篇文章中,谈到过引起线程不安全的原因,初步了解了 “可见性” “Java内存模型” “指令重排序”,本章讲解volatile会涉及到这三个知识点,详细内容可以参考  JavaEE初阶(6) 这篇文章。目录一. 引入二.volatile关键字 a.保证“可......
  • JavaEE 初阶(7)——多线程5之线程安全中 -->“死锁”
    目录一.什么是“死锁”二.产生死锁的场景  场景1:一个线程连续加锁 场景2:两个线程两把锁场景3:N个线程M把锁 三.产生死锁的四个必要条件(缺一不可)四. Java标准库中的线程安全类一.什么是“死锁”并非是synchronized就一定线程安全,还要看代码具体咋写。到底......
  • JavaEE 初阶(9)——多线程7之 wait 和 notify
    目录一.监视器锁与监视器二.wait()  三.notify()和notifyAll()3.1notify() 3.2notifyAll()3.3wait等待 和sleep休眠的对比(面试题)wait(等待)/notify(通知)由于线程在操作系统上是“随机调度,抢占式执行”的,因此线程之间执行的先后顺序难以预知。但是......
  • 雷达气象学(4)——雷达参数和雷达气象方程
    目录4.1与脉冲相关的参数4.1.1电磁波的波长4.1.2脉冲重复频率(PRF)和脉冲重复周期(PRT)4.1.3脉冲宽度和脉冲长度4.1.4脉冲发射功率4.2与天线相关的参数4.2.1天线方向图和波束宽度4.2.2天线增益4.3雷达气象方程4.3.1单个目标的雷达气象方程4.3.2粒子群的雷达气象方程本篇文......