docs: def _init_offsets(self, batchsize):
          """
          Compute new initial and target offsets and do other maintenance tasks
          """
          upper_offsets = previous_lower_offsets = self._lower_offsets
          if not upper_offsets:
              upper_offsets = self.latest_offsets
          self._upper_offsets = {p: o for p, o in upper_offsets.items() if o > self._min_lower_offsets[p]}
  
          # remove db dupes not used anymore
          if self._dupes:
              for p in list(six.iterkeys(self._dupes)):
                  if p not in self._upper_offsets:
                      db = self._dupes.pop(p)
                      db.close()
                      os.remove(db.filename)
  
          partition_batchsize = 0
          if self._upper_offsets:
              partition_batchsize = max(int(batchsize * self.__scan_excess), batchsize)
              self._lower_offsets = self._upper_offsets.copy()
              total_offsets_run = 0
              for p in sorted(self._upper_offsets.keys()):
                  # readjust partition_batchsize when a partition scan starts from latest offset
                  if total_offsets_run > 0 and partition_batchsize > batchsize:
                      partition_batchsize = batchsize
                  if partition_batchsize > 0:
                      self._lower_offsets[p] = max(self._upper_offsets[p] - partition_batchsize, self._min_lower_offsets[p])
                      offsets_run = self._upper_offsets[p] - self._lower_offsets[p]
                      total_offsets_run += offsets_run
                      partition_batchsize = partition_batchsize - offsets_run
                  else:
                      break
              log.info('Offset run: %d', total_offsets_run)
              # create new consumer if partition list changes
              if previous_lower_offsets is not None and set(previous_lower_offsets.keys()) != set(self._lower_offsets):
                  self._create_scan_consumer(self._lower_offsets.keys())
  
              # consumer must restart from newly computed lower offsets
              self._update_offsets(self._lower_offsets)
          log.info('Initial offsets for topic %s: %s', self._topic, repr(self._lower_offsets))
          log.info('Target offsets for topic %s: %s', self._topic, repr(self._upper_offsets))
  
          return batchsize