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. Codeforces Round #503 (by SIS, Div. 2) D. The hat -交互题,二分

    cf1020D 题意: 交互题目,在有限的询问中找到一个x,使得数列中的第x位和第(x+n/2)位的值大小相同.数列保证相邻的两个差值为1或-1: 思路: 构造函数f(x) = a[x] - a[x ...

  2. 图论之拓扑排序 poj1128 Frame Stacking

    题目网址 http://poj.org/problem?id=1128 思路:遍历找出每一种字母出现的最大和最小的横纵坐标,假如本应出现字母A的地方出现了字母B,那么A一定在字母B之前,这就相当于点A ...

  3. Atcoder D - XOR Replace(思维)

    题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_d 题解:稍微想一下就知道除了第一次的x是所有的异或值,之后的x都是原先被替换掉的a[i]所以要想 ...

  4. docker 搭建小型的node开发环境。

    选择daocloud的镜像源----快.不多说 镜像的准备: docker pull docker.io/node 下载node镜像 docker pull daocloud.io/nginx 下载n ...

  5. Wireshark解密HTTPS流量的两种方法

    原理 我们先回顾一下SSL/TLS的整个握手过程: Clienthello:发送客户端的功能和首选项给服务器,在连接建立后,当希望重协商.或者响应服务器的重协商请求时会发送. version:客户端支 ...

  6. ElasticSearch常见经典面试题

    1.为什么要使用Elasticsearch? ​ 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下 ...

  7. Google工程师亲授 Tensorflow2.0-入门到进阶

    第1章 Tensorfow简介与环境搭建 本门课程的入门章节,简要介绍了tensorflow是什么,详细介绍了Tensorflow历史版本变迁以及tensorflow的架构和强大特性.并在Tensor ...

  8. Python大佬告诉你:使用Python处理yaml格式的数据简单到爆

    一.思考❓❔ 1.什么是yaml? 不是标记语言 对用户极其友好 数据序列化标准 跨语言 所有编程语言都支持 跨平台 所有平台都支持 Windows.linux.Mac 格式简单 比json小姐姐穿得 ...

  9. SAP压缩excel并发送mail案例

    "SAP压缩附件 REPORT ZMMR0033_DEL7 . TYPES: BEGIN OF bin_file,            name TYPE string,          ...

  10. GC垃圾收集算法

    JVM中的垃圾收集算法实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,这里介绍几种垃圾收集算法的思想. 1.标记-清除算法 这是最基础的垃圾收集算法,分为“标记”和“清除”两个阶 ...