Packages
kafka_ex_tc
0.12.1-11-debug
0.13.0
0.12.1
0.12.1-51-1
0.12.1-50-3
0.12.1-50-2
0.12.1-50-1
0.12.1-49-2
0.12.1-49-1
0.12.1-49-0
0.12.1-48-2
0.12.1-48-1
0.12.1-47-1
0.12.1-46-2
0.12.1-45-2
0.12.1-45-1
0.12.1-44-1
0.12.1-43-1
0.12.1-42-8
0.12.1-42-6
0.12.1-42-5
0.12.1-42-4
0.12.1-42-1
0.12.1-41-2
0.12.1-41-1
0.12.1-40-9
0.12.1-40-8
0.12.1-40-7
0.12.1-40-6
0.12.1-40-5
0.12.1-40-4
0.12.1-40-3
0.12.1-40-2
0.12.1-40-10
0.12.1-40-1
0.12.1-39-2
0.12.1-39-1
0.12.1-36-3
0.12.1-36-2
0.12.1-36-1
0.12.1-34-b
0.12.1-34-a
0.12.1-33-1
0.12.1-32-a1
0.12.1-29-s-3
0.12.1-29-s-2
0.12.1-29-s-1
0.12.1-28-rumble-1
0.12.1-27-2
0.12.1-27-1
0.12.1-26-rumble-2
0.12.1-26-rumble-1
0.12.1-26-dev-1
0.12.1-26-dev.1
0.12.1-26-3
0.12.1-26-2
0.12.1-26-1
0.12.1-25-s-8
0.12.1-25-s-7
0.12.1-25-s-6
0.12.1-25-s-5
0.12.1-25-s-4
0.12.1-25-s-3
0.12.1-25-s-2
0.12.1-25-s-1
0.12.1-25-dev-22
0.12.1-25-dev
0.12.1-24-2
0.12.1-24-1
0.12.1-22-poc-b-7
0.12.1-20-poc-b-6
0.12.1-20-poc-b-5
0.12.1-20-poc-b-4
0.12.1-20-poc-b-3
0.12.1-19-poc-b-3
0.12.1-19-poc-b-2
0.12.1-19-poc-b-1
0.12.1-19-poc-7
0.12.1-19-poc-6
0.12.1-19-poc-4
0.12.1-19-poc-3
0.12.1-19-poc-2
0.12.1-19-poc-1
0.12.1-19-poc
0.12.1-11-debug-1
0.12.1-11-debug
0.12.1-39
0.12.1-38.a
0.12.1-38
0.12.1-37.c
0.12.1-37.b
0.12.1-37.a
0.12.1-37.1
0.12.1-37
0.12.1-35.b
0.12.1-35.a
0.12.1-34
0.12.1-33
0.12.1-32
0.12.1-31
0.12.1-30
0.12.1-29
0.12.1-28
0.12.1-27
0.12.1-26
0.12.1-25
0.12.1-24
0.12.1-23
0.12.1-22.1
0.12.1-22
0.12.1-21
0.12.1-20
0.12.1-19
0.12.1-18
0.12.1-17
0.12.1-16
0.12.1-15
0.12.1-14
0.12.1-13
0.12.1-12
0.12.1-11
0.12.1-10
0.12.1-9
0.12.1-8
0.12.1-7
0.12.1-6
0.12.1-5
0.12.1-4
0.12.1-3
0.12.1-2
0.12.1-1
Kafka client for Elixir/Erlang.
Current section
Files
Jump to
Current section
Files
lib/kafka_ex/protocol/offset_fetch.ex
defmodule KafkaEx.Protocol.OffsetFetch do
alias KafkaEx.Protocol
import KafkaEx.Protocol.Common
@moduledoc """
Implementation of the Kafka OffsetFetch request and response APIs
"""
defmodule Request do
@moduledoc false
defstruct consumer_group: nil,
topic: nil,
partition: nil,
# NOTE api_version only used in new client
api_version: 0
@type t :: %Request{
consumer_group: nil | binary,
topic: binary,
partition: integer,
api_version: integer
}
end
defmodule Response do
@moduledoc false
defstruct topic: nil, partitions: []
@type t :: %Response{topic: binary, partitions: list}
def last_offset(:topic_not_found) do
0
end
def last_offset(offset_fetch_data) do
case offset_fetch_data do
[] ->
0
_ ->
partitions = offset_fetch_data |> hd |> Map.get(:partitions, [])
case partitions do
[] -> 0
_ -> partitions |> hd |> Map.get(:offset, 0)
end
end
end
end
def create_request(correlation_id, client_id, offset_fetch_request) do
KafkaEx.Protocol.create_request(:offset_fetch, correlation_id, client_id) <>
<<byte_size(offset_fetch_request.consumer_group)::16-signed,
offset_fetch_request.consumer_group::binary, 1::32-signed,
byte_size(offset_fetch_request.topic)::16-signed,
offset_fetch_request.topic::binary, 1::32-signed,
offset_fetch_request.partition::32>>
end
def parse_response(
<<_correlation_id::32-signed, topics_size::32-signed,
topics_data::binary>>
) do
parse_topics(topics_size, topics_data, __MODULE__)
end
def parse_partitions(0, rest, partitions, _topic), do: {partitions, rest}
def parse_partitions(
partitions_size,
<<partition::32-signed, offset::64-signed, metadata_size::16-signed,
metadata::size(metadata_size)-binary, error_code::16-signed,
rest::binary>>,
partitions,
topic
) do
parse_partitions(
partitions_size - 1,
rest,
[
%{
partition: partition,
offset: offset,
metadata: metadata,
error_code: Protocol.error(error_code)
}
| partitions
],
topic
)
end
end