Kafka0.11之producer/consumer(Scala):

KafkaConsumer:
import java.util.Properties
import org.apache.kafka.clients.consumer.KafkaConsumer
import kafka.consumer.ConsumerConfig
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.clients.consumer.ConsumerRecords object KafkaConsumer {
def main(args: Array[String]): Unit = {
var groupid = "ScalaGroup"
var consumerid = "ScalaConsumer"
var topic = "ScalaTopic" //args match {
// case Array(arg1, arg2, arg3) => topic = arg1; groupid = arg2; consumerid = arg3
//} val props = new Properties()
props.put("bootstrap.servers", "192.168.1.151:9092,192.168.1.152:9092,192.168.1.153:9092")
props.put("group.id", groupid)
props.put("client.id", "test")
props.put("consumer.id", consumerid)
// props.put("auto.offset.reset", "smallest")
props.put("enable.auto.commit", "true")
props.put("auto.commit.interval.ms", "100")
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") val consumer = new KafkaConsumer[String, String](props)
consumer.subscribe(java.util.Arrays.asList(topic)) while (true) {
val records = consumer.poll(100)
for (record <- records) {
println(s"Topic = ${record.topic()}, partition = ${record.partition()}, key = ${record.key()}, value = ${record.value()}")
}
} }
}
KafkaProducer:
import java.util.Properties
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerRecord} object KafkaProducer {
def main(args: Array[String]): Unit = { val brokers = "192.168.1.151:9092,192.168.1.152:9092,192.168.1.153:9092"
// val brokers = "192.168.1.151:9092"
val topic = "ScalaTopic"; val props = new Properties()
props.put("bootstrap.servers", brokers)
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("partitioner.class", classOf[HashPartitioner].getName)
props.put("producer.type", "sync")
props.put("batch.size", "1")
props.put("acks", "all") val producer = new KafkaProducer[String, String](props); val sleepFlag = false;
val message1 = new ProducerRecord[String, String](topic, "1", "test 1aa");
producer.send(message1);
if (sleepFlag) Thread.sleep(5000);
val message2 = new ProducerRecord[String, String](topic, "1", "test 1bb");
producer.send(message2);
if (sleepFlag) Thread.sleep(5000);
val message3 = new ProducerRecord[String, String](topic, "1", "test 1cc");
producer.send(message3);
if (sleepFlag) Thread.sleep(5000);
val message4 = new ProducerRecord[String, String](topic, "4", "test 4dd");
producer.send(message4);
if (sleepFlag) Thread.sleep(5000);
val message5 = new ProducerRecord[String, String](topic, "4", "test 4aa");
producer.send(message5);
if (sleepFlag) Thread.sleep(5000);
val message6 = new ProducerRecord[String, String](topic, "3", "test 3bb");
producer.send(message6);
if (sleepFlag) Thread.sleep(5000);
val message7 = new ProducerRecord[String, String](topic, "2", "test 2bb");
producer.send(message7);
if (sleepFlag) Thread.sleep(5000);
producer.close()
}
}
HashPartitioner:
import java.util

import scala.math._
import kafka.utils.VerifiableProperties
import org.apache.kafka.clients.producer.Partitioner
import org.apache.kafka.common.Cluster class HashPartitioner extends Partitioner {
def this(verifiableProperties: VerifiableProperties) { this } override def partition(topic: String, key: scala.Any, keyBytes: Array[Byte], value: scala.Any, valueBytes: Array[Byte], cluster: Cluster) = {
val partitionInfo = cluster.partitionsForTopic(topic)
val numPartitions = partitionInfo.size() if (key.isInstanceOf[Int]) {
abs(key.toString().toInt) % numPartitions
} key.hashCode() % numPartitions } override def close() = { } override def configure(configs: util.Map[String, _]) = { }
}
												

Kafka 学习笔记之 Kafka0.11之producer/consumer(Scala)的更多相关文章

  1. Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer

    Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer: 启动Zookeeper 启动Kafka0.11 创建一个新的Topic: ./kafk ...

  2. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  3. kafka学习笔记(一)消息队列和kafka入门

    概述 学习和使用kafka不知不觉已经将近5年了,觉得应该总结整理一下之前的知识更好,所以决定写一系列kafka学习笔记,在总结的基础上希望自己的知识更上一层楼.写的不对的地方请大家不吝指正,感激万分 ...

  4. RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试

    1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...

  5. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  6. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  7. kafka 学习笔记

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  8. 【大数据】Kafka学习笔记

    第1章 Kafka概述 1.1 消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息 ...

  9. kafka学习笔记(三)kafka的使用技巧

    概述 上一篇随笔主要介绍了kafka的基本使用包括集群参数,生产者基本使用,consumer基本使用,现在来介绍一下kafka的使用技巧. 分区机制 我们在使用 Apache Kafka 生产和消费消 ...

随机推荐

  1. 牛客小白月赛4 H 相邻的糖果 思维

    链接:https://www.nowcoder.com/acm/contest/134/H来源:牛客网 题目描述 有n个盒子摆成一排,每个盒子内都有ai个糖果. 现在你可以执行以下操作: ·你可以选择 ...

  2. codeforces 798 C. Mike and gcd problem(贪心+思维+数论)

    题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...

  3. 【Distributed】缓存技术

    一.缓存概述 1.1 缓存技术分类 1.2 缓存框架分类 1.3 Session理解的误区 二.基于Map集合实现本地缓存 2.1 定义Map缓存工具类 2.2 使用案例 三.Ehcache 缓存框架 ...

  4. NOIP要炸?

    今天起床,翻我的群,突然看见一条消息: “NOIP要被禁赛了!” 莫名奇妙啊...... 于是我就进去看了看,网上疯传,搞得跟真的一样,差点吓到我了. 但好在每个人心中都有一个阿Q,会精神胜利法,于是 ...

  5. git之rebase、merge和cherry pick的区别(面试常问)

    git flow图例镇楼 merge 这个简单,初学者常用.比如主分支是Dev,最新版本是01.然后小明基于此,搞了个feature 分支A,业务:打酱油.然后在上面多次提交,完成功能迭代开发,如A1 ...

  6. 任务分线程实现(java)

    1.创建一个类,用户存储信息 public class Users { private String userid; private String username; public Users() { ...

  7. golang实现get和post请求的服务端和客户端

    服务端 在golang中,实现一个普通的http接口可以处理get请求和x-www-form-urlencoded类型的post请求,而如果想实现处理json数据的post请求,则需要用另外的方式实现 ...

  8. 【学习笔记】第一章 python安全开发简介

    1.1为什么黑客喜欢用python? python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象的称为“”内置电池“”,用python开发,许多功能不必从零 ...

  9. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  10. 52 (OC)* 苹果手机各种尺寸详细表以及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax屏幕适配

     iPhone设备 物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的. 代数 设备 操作系统 逻辑分辨率(point) 物理分辨率(pixel) 屏幕尺寸(对角线长度) 缩放因子   iPhone ...